按数组元素中的一个元素重新排序


Re-sort an array's element by one of their element

我遇到一个数组排序问题。

数组的结构是这样的:

array(4) {
  [1]=>
  array(5) {
    ["type"]=>
    string(4) "A"
    ["index"]=>
    int(1)
  }
  [2]=>
  array(5) {
    ["type"]=>
    string(4) "B"
    ["index"]=>
    int(4)
  }
  [3]=>
  array(5) {
    ["type"]=>
    string(4) "C"
    ["index"]=>
    int(2)
  }
  [4]=>
  array(5) {
    ["type"]=>
    string(4) "D"
    ["index"]=>
    int(3)
  }
}

正如你所看到的,在每个子数组中,都有一个键"index",并且这里的值的顺序不是正确的1-2-3-4,而是1-4-2-3 -3。

如何排序这个数组,使它的子数组以正确的顺序列出?

注::实际的数组要比这个大得多,也复杂得多。

usort(
    $myArray,
    function ($a, $b) {
        if ($a['index'] == $b['index']) {
            return 0;
        }
        return ($a['index'] < $b['index']) ? -1 : 1;
    }
);

您可以使用usort()函数来完成此操作。它接受一个未排序的数组和一个回调函数作为参数。在回调函数中,您可以定义如何比较元素。下面是一个例子:

function compare($a, $b) {
    if($a['index'] === $b['index']) {
        return 0;
    }
    return $a['index'] < $b['index'] ? -1 : 1;
}
usort($array, 'compare');

注意:回调函数可以是匿名函数,也可以是普通函数的名称。我使用了一个函数名,而@MarkBaker使用了一个匿名函数。这样你就有了两个例子

一个简单快速的重新索引数组的解决方案。

$old ; // Your old array
$new = array() ;
foreach ($old as $child){
  $new[$child['index']] = $child ;
}