【发布时间】:2018-07-17 15:45:15
【问题描述】:
代码:
<?php
$data = array(
'uid3' => array(
'name' => 'Unique ID 3',
'count' => 11
),
'uid1' => array(
'name' => 'Unique ID 1',
'count' => 11
),
'uid2' => array(
'name' => 'Unique ID 2',
'count' => 15
),
'uid4' => array(
'name' => 'Unique ID 4',
'count' => 13
)
);
$counts = array_map( function( $v ){
return $v[ 'count' ];
}, $data );
$names = array_map( function( $v ){
return $v[ 'name' ];
}, $data );
print_r( $counts );
print_r( $names );
array_multisort(
$counts, SORT_DESC, SORT_NUMERIC,
$names, SORT_ASC, SORT_STRING,
$data
);
print_r( $data );
输出:
// $counts
Array
(
[uid3] => 11
[uid1] => 11
[uid2] => 15
[uid4] => 13
)
// $names
Array
(
[uid3] => Unique ID 3
[uid1] => Unique ID 1
[uid2] => Unique ID 2
[uid4] => Unique ID 4
)
// $data after sorting
Array
(
[uid2] => Array
(
[name] => Unique ID 2
[count] => 15
)
[uid4] => Array
(
[name] => Unique ID 4
[count] => 13
)
[uid1] => Array
(
[name] => Unique ID 1
[count] => 11
)
[uid3] => Array
(
[name] => Unique ID 3
[count] => 11
)
)
问题:
array_multisort()是如何知道将$counts的排序结果应用到多维数组$data中每一项的count子键的?
$names 与 name 子键类似。
奖励:
如果$names, SORT_ASC, SORT_STRING, 在函数调用中被注释掉,那么uid3 仍然会在uid1 之后结束。为什么?
我一直在阅读以下资源,但我无法确定这如何适用于我的示例:
【问题讨论】:
标签: php arrays sorting array-multisort