Php 多维数组排序
我有以下数组:Php 多维数组排序,php,sorting,multidimensional-array,Php,Sorting,Multidimensional Array,我有以下数组: array ( [0]=>array ( [0]=>array ( [value]=>3.5 [id] =>1 ) [1]=>array ( [value]=>1.5
array
(
[0]=>array
(
[0]=>array
(
[value]=>3.5
[id] =>1
)
[1]=>array
(
[value]=>1.5
[id] =>2
)
[2]=>array
(
[value]=>1.5
[id] =>3
)
)
)
[1]=>array
(
[0]=>array
(
[value]=>4.5
[id] =>1
)
[1]=>array
(
[value]=>5.5
[id] =>2
)
[2]=>array
(
[value]=>6.5
[id] =>3
)
)
)
)
我想按id相等的值对数组排序,最好的方法是什么?试试运气
<?php
$data = array(
array( /* #1 */
array('value' => 3.5, 'id' => 1),
array('value' => 1.5, 'id' => 2),
array('value' => 1.5, 'id' => 3)
),
array( /* #2 */
array('value' => 4.5, 'id' => 1),
array('value' => 5.5, 'id' => 2),
array('value' => 6.5, 'id' => 3)
)
);
/* Merge #1 and #2 into one array */
$tmp = array();
foreach ($data as $firstDimension) {
$tmp = array_merge($tmp, $firstDimension);
}
/* Sort by id (1st, ASC) and value (2nd, DESC) */
usort($tmp, function ($a, $b) {
$d = $a['id'] - $b['id'];
if ($d !== 0) {
return $d;
}
return $b['value'] - $a['value'];
});
/* Group entries by id */
$grouped = array();
$c = 0;
foreach ($tmp as $entry) {
if ($c > 0 && $grouped[$c - 1]['id'] === $entry['id']) {
$grouped[$c - 1]['values'][] = $entry['value'];
} else {
$grouped[] = array('id' => $entry['id'],
'values' => array($entry['value']));
$c++;
}
}
unset($tmp);
print_r($grouped);
改变顶级结构,在顶级阵列之间移动元素?排序需要如何在更高维度中运行?是的,我想按id相等的值对顶层排序。顶层有多个值,如何处理?例如,按id相等的值排序1我仍然不清楚如何定义此排序。你是说把它当作一个简单的列表,还是保留它的结构。如果您保留结构,那么是什么决定了一个顶层在另一个顶层之前还是之后。你一直在说“如果id相等”,排序就是排序,
<=>
,而不仅仅是相等。
Array
(
[0] => Array
(
[id] => 1
[values] => Array
(
[0] => 4.5
[1] => 3.5
)
)
[1] => Array
(
[id] => 2
[values] => Array
(
[0] => 5.5
[1] => 1.5
)
)
[...]