2017-02-08 11 views
0

J'ai un multi-gamme comme ceci:deux tableaux usort PHP: d'abord par valeur, seconde par clé basée sur le premier tableau pour

Array 
(
    ['player1'] => Array (
     ['a'] => 112 
     ['b'] => 234 
     ['c'] => 511 
     ['d'] => 323 
     ['e'] => 456 
     ['f'] => 324 
    ) 
    ['player2'] => Array (
     ['a'] => 545 
     ['b'] => 434 
     ['c'] => 158 
     ['d'] => 053 
     ['e'] => 982 
     ['f'] => 111   
    ) 
) 

je dois trier player1 par son value, puis trier player2 avec la même key ordre.

J'ai besoin ceci:

Array 
(
    ['player1'] => Array (
     ['a'] => 112 
     ['b'] => 234   
     ['d'] => 323 
     ['f'] => 324 
     ['e'] => 456 
     ['c'] => 511   
    ) 
    ['player2'] => Array (
     ['a'] => 545 
     ['b'] => 434 
     ['d'] => 053 
     ['f'] => 111   
     ['e'] => 982 
     ['c'] => 158 

    ) 
) 

Vous pouvez voir comment player1 est commandé par ses valeurs, player2 est commandée par player1 commande clés.

Je possède ce code pour commander player1

usort ($my_array, 'sortByOrder'); 

function sortByOrder($a, $b) {  
    if ($a['player1'] < $b['player1']) 
     return 1;  
} 

Puis-je obtenir ce résultat:

Array 
(
    ['player1'] => Array (
     ['0'] => 112 
     ['1'] => 234   
     ['2'] => 323 
     ['3'] => 324 
     ['4'] => 456 
     ['5'] => 511   
    ) 
    ['player2'] => Array (
     ['a'] => 545 
     ['b'] => 434 
     ['c'] => 158 
     ['d'] => 053 
     ['e'] => 982 
     ['f'] => 111   
    ) 
) 

Je lâche player1 clés, je ne peux pas faire une boucle à l'ordre player2 comme player1 clés .

Des idées?

+2

http://php.net/manual/en/array.sorting.php - vous montre que 'usort' ne maintient pas les clés, vous avez besoin de 'uasort' – billyonecan

Répondre

1

essayer ce que votre besoin:

$my_array= array 
(
    'player1' => array (
     'a' => 112, 
     'b' => 234, 
     'c' => 511, 
     'd' => 323, 
     'e' => 456, 
     'f' => 324, 
    ), 
    'player2' => array (
     'a' => 545, 
     'b' => 434, 
     'c' => 158, 
     'd' => 53, 
     'e' => 982, 
     'f' => 111,   
    ) 
); 

asort($my_array['player1']); 

$tmp_arr = $my_array['player2']; 

$my_array['player2']=array(); 

foreach ($my_array['player1'] as $key => $value) { 
    $my_array['player2'][$key]=$tmp_arr[$key]; 
} 

var_dump($my_array); 
0

est-ce que vous devez le trier par une fonction? sinon, cela fonctionnera.

$a = Array ('player1' => Array (
         'a' => 112, 
         'b' => 234, 
         'c' => 511, 
         'd' => 323, 
         'e' => 456, 
         'f' => 324 
         ), 
     'player2' => Array (
         'a' => 545, 
         'b' => 434, 
         'c' => 158, 
         'd' => 053, 
         'e' => 982, 
         'f' => 111  
         ) 
); 

asort($a['player1']); 

foreach ($a['player1'] as $value) { 
    echo $value."<br>"; 
} 

echo "<hr>"; 

foreach ($a['player2'] as $value) { 
    echo $value."<br>"; 
}