代码:
<?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
的排序结果应用于多维数组count
中每个项目的$data
子项?
与$names
子键的name
类似。
奖金:
如果在函数调用中未注释$names, SORT_ASC, SORT_STRING,
,则uid3
仍在uid1
之后结束。为什么?
我一直在阅读以下资源,但无法确定如何将其应用于我的示例:
答案 0 :(得分:1)
我不想将其发布为答案,但是我只需要几个额外的字符。
我无法确切地说它在技术上是如何做到的,但是我认为要特别解决“ array_multisort()
如何知道如何应用{{1}的排序结果}到count子键”,答案是“没有”。更改子项,您将获得相同的结果。也许我不是按照您的预期来阅读您的问题,但似乎您是在询问如何查看$counts
的子键值然后进行排序。但事实并非如此。它查看$data
的排序方式(查看$names
的排序方式)并将相同的排序应用于$counts
的 primary 键。这意味着它将查看将原来的位置移到了新的位置。您的第一个数组是由一个子键的值组成的,而第二个数组是由另一个子键的值组成的事实是无关紧要的。以相同的顺序手动构建这些数组,您将获得相同的结果。
对于奖金,我想说这与“如果两个成员比较相等,则它们在排序数组中的相对顺序是不确定的”有关。因此,这比其他任何事情都更是巧合。