我需要在PHP中对数组进行排序,然后在第一个索引相同的情况下按其第二个索引进行排序。让我解释一下:
元素将随机排列:
(2,1),(4,4),(2,9),(4,8),(2,35),(2,1),(2,35),(4,4),(4,25),(4,4)
我需要先按照第一个数字对它们进行排序。结果将是:
(2,1),(2,9),(2,1),(2,35),(4,4),(4,8),(4,4),(4,25),(4,4)
现在,您可以看到所有元素都按照第一个索引进行分组。现在我需要按照当前分组的第二个索引“WITHIN”进行分组。因此看起来像:
(2,1),(2,1),(2,9),(2,35),(4,4),(4,4),(4,4),(4,8),(4,25)
这只是数组的简单表示。实际数组如下:
Array
(
[0] => Array
(
[practice_id] => 119
[practice_location_id] => 173
)
[1] => Array
(
[practice_id] => 2
[practice_location_id] => 75
)
[2] => Array
(
[practice_id] => 18
[practice_location_id] => 28
)
[3] => Array
(
[practice_id] => 119
[practice_location_id] => 174
)
[4] => Array
(
[practice_id] => 119
[practice_location_id] => 173
)
[5] => Array
(
[practice_id] => 2
[practice_location_id] => 75
)
[6] => Array
(
[practice_id] => 119
[practice_location_id] => 174
)
[7] => Array
(
[practice_id] => 18
[practice_location_id] => 28
)
[8] => Array
(
[practice_id] => 18
[practice_location_id] => 27
)
)
真的很感激一些帮助。
答案 0 :(得分:6)
将usort
与自定义比较函数一起使用,该函数按第一个字段排序,但如果它们相等,则按第二个字段排序:
function my_compare($a, $b) {
if ($a['practice_id'] == $b['practice_id'])
return $a['practice_location_id'] - $b['practice_location_id'];
else
return $a['practice_id'] - $b['practice_id'];
}
答案 1 :(得分:2)
function compare_callback($x, $y) {
if ($x['practice_id'] < $y['practice_id'])
return 1;
if ($x['practice_id'] > $y['practice_id'])
return -1;
if ($x['practice_id'] == $y['practice_id']) {
if ($x['practice_location_id'] < $y['practice_location_id'])
return 1;
if ($x['practice_location_id'] > $y['practice_location_id'])
return -1;
if ($x['practice_location_id'] == $y['practice_location_id'])
return 0;
}
}
将此方法与usort()
一起使用答案 2 :(得分:1)
您可以使用PHP的usort()
-function:
function someCompareFunction($a, $b) {
$order = array('practice_id', 'practice_location_id');
foreach ($order as $key) {
if (isset($a[$key]) && isset($b[$key]) && $a[$key] != $b[$key]) {
return $a[$key] - $b[$key];
}
}
return 0;
}
usort($yourArray, 'someCompareFunction');
从PHP 5.3起可以使用以下内容:
usort($yourArray, function($a, $b) {
// comparison code
});
您可以根据需要使比较功能变得复杂。
答案 3 :(得分:1)
这个回调使用我刚刚从@ casablanca的答案中学到的东西,然后把它放在一个循环中。这样,它不仅可以比较两个,而且可以比较多个键。
function sort_callback($x, $y)
foreach ($x as $key => $value) {
if ($x[$key] != $y[$key])
return $x[$key] - $y[$key];
}
return 0;
}
如前所述,将此函数作为对usort()的回调。