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
)
)
我需要按他的 value
对 player1
进行排序,然后使用相同的 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);
我有一个这样的多数组:
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
进行排序,然后使用相同的 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);