2017-02-08 38 views
0

我有一个多阵列是这样的:PHP usort两个阵列:首先由值,第二通过键基于第一阵列顺序

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

我需要由他value排序player1,然后排序player2用相同key订单。

我需要这样的:

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 

    ) 
) 

你可以看到如何player1是由他的值排序,然后player2player1键顺序进行排序。

我有这样的代码来订购player1

usort ($my_array, 'sortByOrder'); 

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

然后我得到这样的结果:

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

我松player1钥匙,所以我不能让一个循环订购player2player1键。

任何想法?

+2

http://php.net/manual/en/array.sorting.php - 显示你'usort'不保持键,你需要'uasort' – billyonecan

回答

1

试试这个根据自己的需要:

$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

你必须通过一个函数对它进行排序吗?如果没有,这将工作。

$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>"; 
} 
相关问题