通过其中一个元素重新排序数组元素

时间:2013-04-08 15:46:16

标签: php

我遇到了数组排序的问题。

我的阵列结构是这样的:

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)
  }
}

正如你所看到的,在每个子数组中,有一个键"索引",并且它的值没有按照正确的顺序1-2-3-4但它是' 1-4-2-3。

我如何对这个数组进行排序,以便以正确的顺序列出其子数组?

P.S。:实体阵列比这个更大,更复杂。

3 个答案:

答案 0 :(得分:3)

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

答案 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使用了匿名函数。所以你有两个例子。

答案 2 :(得分:0)

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

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