[英]Sorting multidimensional array by two different key or value
This example depends on two keys/values instead of just one unlike many other examples I've seen in Stack-overflow. 此示例依赖于两个键/值,而不是仅与我在Stack-overflow中看到的许多其他示例不同。 Apart from sorting array below by primary
key, I also would like to sort it by age
key so that I can achieve EXPECTED RESULT below. 除了按primary
键对数组进行排序以外,我还希望按age
键对数组进行排序,以便在下面实现预期的结果。 How should I modify CODE below to achieve it? 我应该如何修改下面的CODE来实现? CURRENT RESULT has A-6-6
key misplaced because my code doesn't handle it yet. CURRENT RESULT的A-6-6
钥匙放错了位置,因为我的代码尚未处理它。
ORIGINAL ARRAY 原始阵列
$myarray = [
'Z-9-0' => [
'primary' => true,
'age' => 55
],
'C-7-1' => [
'primary' => false,
'age' => 60
],
'K-1-9' => [
'primary' => true,
'age' => 60
],
'C-2-1' => [
'primary' => false,
'age' => 40
],
'F-6-6' => [
'primary' => true,
'age' => 60
],
'A-6-6' => [
'primary' => true,
'age' => 30
]
];
EXPECTED RESULT 预期结果
(
[F-6-6] => Array
(
[primary] => 1
[age] => 60
)
[K-1-9] => Array
(
[primary] => 1
[age] => 60
)
[Z-9-0] => Array
(
[primary] => 1
[age] => 55
)
[A-6-6] => Array
(
[primary] => 1
[age] => 30
)
[C-7-1] => Array
(
[primary] =>
[age] => 60
)
[C-2-1] => Array
(
[primary] =>
[age] => 40
)
)
CODE 码
uasort($myarray, function($a, $b) {
return strcmp($b['primary'], $a['primary']);
});
print_r($org);
CURRENT RESULT 当前结果
As you can see, A-6-6
is not in right place compared to expected result above. 如您所见,与上面的预期结果相比, A-6-6
位置不合适。 So the bigger the age
the higher place it should appear. 因此age
越大,应该出现的位置越高。
(
[A-6-6] => Array
(
[primary] => 1
[age] => 30
)
[F-6-6] => Array
(
[primary] => 1
[age] => 60
)
[K-1-9] => Array
(
[primary] => 1
[age] => 60
)
[Z-9-0] => Array
(
[primary] => 1
[age] => 55
)
[C-7-1] => Array
(
[primary] =>
[age] => 60
)
[C-2-1] => Array
(
[primary] =>
[age] => 40
)
)
I think you can add an extra check for the 'age' key in the uasort when the values for the 'primary' key are equal'. 我认为当“主”键的值相等时,您可以在uasort中为“年龄”键添加额外的检查。
uasort($myarray, function($a, $b) {
if ($b['primary'] === $a['primary']) {
return $b['age'] > $a['age'];
}
return strcmp($b['primary'], $a['primary']);
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.