PHP 对两个数组进行排序:首先按值排序,然后根据第一个数组顺序按键排序

PHP usort two arrays: first by value, second by key based on first array order

我有一个这样的多数组:

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

我需要按他的 valueplayer1 进行排序,然后使用相同的 key 顺序对 player2 进行排序。

我需要这个:

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 是如何按他的值排序的,然后 player2 是按 player1 键顺序排序的。

我要订购此代码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 键,所以我无法循环订购 player2 作为 player1 键。

有什么想法吗?

必须按一种功能排序吗?如果没有,这将起作用。

$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>";
}

根据您的需要试试这个:

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