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
                )

        )
[...]