2017-02-17 4 views
0

J'ai un tableau:array_push ou array_unshift plusieurs lignes en haut de la même tableau 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 
) 

L'ordre par défaut est par [Order] Je veux re-trier ce tableau afin qu'il décrète par [ContentGroupIsNew] = 1 en haut (s'il en existe, dans cet exemple 2 existent), mais gardez l'ordre existant du reste des éléments.

Si j'utilise une fonction usort, je peux obtenir le [ContentGroupIsNew] = 1 mais le reste des éléments semble avoir ordonné et non au hasard rester fidèle à la valeur [Order] originale.

Ainsi, le résultat final devrait ressembler à ceci:

[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 
) 

Code PHP:

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

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

À quoi ressemble votre code? La modification de la condition dans votre fonction 'usort()' devrait être facile. – jeroen

+0

@jeroen a ajouté PHP à la fin de la question. –

Répondre

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); 

trouvé cette solution ici: PHP sort array by two field values

+0

Cela m'a eu près, mais les exemples de cette autre solution [PHP sort tableau par deux valeurs de champ] (http://stackoverflow.com/questions/4582649/php-sort-array-by-two-field-values) a obtenu moi là. THX. –

+0

Content de vous aider, à quoi ressemble le code de tri actuel? juste intéressé qu'est-ce que vous avez changé. –

+0

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

0

s'il vous plaît essayer

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

    uasort($array, "myCmp") 

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

Cela ne semblait pas fonctionner, mais la solution suivante m'a amené là. merci d'aider. –