2017-02-17 103 views
0

同一陣列的頂部我有一個數組:array_push或array_unshift多行PHP

[0] => Array 
    (
     [Id] => 1 
     [Order] => 1 
     [ContentGroupId] => 10 
     [ContentGroupIsNew] => 0 
) 

[1] => Array 
    (
     [Id] => 2 
     [Order] => 2 
     [ContentGroupId] => 11 
     [ContentGroupIsNew] => 0 
) 
[2] => Array 
    (
     [Id] => 3 
     [Order] => 3 
     [ContentGroupId] => 12 
     [ContentGroupIsNew] => 1 
) 
[3] => Array 
    (
     [Id] => 4 
     [Order] => 4 
     [ContentGroupId] => 13 
     [ContentGroupIsNew] => 1 
) 
[4] => Array 
    (
     [Id] => 5 
     [Order] => 5 
     [ContentGroupId] => 14 
     [ContentGroupIsNew] => 0 
) 

默認順序是[Order]我要重新梳理這個陣列,使其訂單由[ContentGroupIsNew] = 1頂部(如果存在的話,在這個樣本中2確實存在),但是保持其餘元素的現有秩序。

如果我使用usort函數,我可以得到[ContentGroupIsNew] = 1,但其餘的元素似乎得到隨機排序,並且不保持原來的[Order]值。

所以,最終的結果應該是這樣的:

[0] => Array 
    (
     [Id] => 3 
     [Order] => 3 
     [ContentGroupId] => 12 
     [ContentGroupIsNew] => 1 
) 

[1] => Array 
    (
     [Id] => 4 
     [Order] => 4 
     [ContentGroupId] => 13 
     [ContentGroupIsNew] => 1 
) 
[2] => Array 
    (
     [Id] => 1 
     [Order] => 1 
     [ContentGroupId] => 10 
     [ContentGroupIsNew] => 0 
) 
[3] => Array 
    (
     [Id] => 2 
     [Order] => 2 
     [ContentGroupId] => 11 
     [ContentGroupIsNew] => 0 
) 
[4] => Array 
    (
     [Id] => 5 
     [Order] => 5 
     [ContentGroupId] => 14 
     [ContentGroupIsNew] => 0 
) 

PHP代碼:

function sort_array($b, $a) { 
    return $a['ContentGroupIsNew'] - $b['ContentGroupIsNew']; 
} 

usort($array, 'sort_array'); 
+0

你的代碼是什麼樣的?修改'usort()'函數中的條件應該很容易。 – jeroen

+0

@jeroen添加了PHP以結束問題。 –

回答

1
foreach ($data as $key => $row) { 
    $return_fare[$key] = $row['ContentGroupIsNew']; 
    $one_way_fare[$key] = $row['Id']; 
} 


array_multisort($return_fare, SORT_DESC, $one_way_fare, SORT_ASC, $data); 
print_r($data); 

發現此解決方案:PHP sort array by two field values

+0

這讓我關閉,但從其他解決方案[PHP的排序數組由兩個字段值]的例子得到了(http://stackoverflow.com/questions/4582649/php-sort-array-by-two-field-values)我在那裏。謝謝。 –

+0

很高興爲您提供幫助,當前排序代碼的外觀如何?只是感興趣你改變了什麼。 –

+0

'usort($ app_iaps,function($ a,$ b){ $ rdiff = $ b ['ContentGroupIsNew'] - $ a ['ContentGroupIsNew']; if($ rdiff)return $ rdiff; return $ a ['Order'] - $ b ['Order']; });'' –

0

請在這裏試試這個

function myCmp($a, $b) 
    { 
     return strcmp($b["ContentGroupIsNew"], $a["ContentGroupIsNew"]); 
    } 

    uasort($array, "myCmp") 

echo "<pre>"; print_r($array); 
+0

這似乎不起作用,但下一個解決方案讓我在那裏。 thx尋求幫助。 –