0

配列の並べ替えで問題が発生しました。

私の配列の構造は次のようになります。

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 です。

子配列が正しい順序でリストされるように、この配列をソートするにはどうすればよいですか?

PS: 実際の配列は、これよりもはるかに大きく複雑です。

4

3 に答える 3

3
usort(
    $myArray,
    function ($a, $b) {
        if ($a['index'] == $b['index']) {
            return 0;
        }
        return ($a['index'] < $b['index']) ? -1 : 1;
    }
);
于 2013-04-08T15:48:41.683 に答える
1

これには関数usort()を使用できます。ソートされていない配列とコールバック関数を引数として受け入れます。コールバック関数では、要素を比較する方法を定義できます。次に例を示します。

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

usort($array, 'compare');

注: コールバックは、無名関数または通常の関数の名前にすることができます。@MarkBaker が匿名関数を使用した関数名を使用しました。したがって、両方の例があります。

于 2013-04-08T15:49:56.170 に答える
0

配列のインデックスを再作成するためのシンプルで高速なソリューション。

$old ; // Your old array
$new = array() ;
foreach ($old as $child){
  $new[$child['index']] = $child ;
}
于 2013-04-08T15:48:55.260 に答える