1. ホーム
  2. php

[解決済み] 多次元配列の値によるソート方法

2022-03-17 11:04:07

質問

この配列を "order"キーの値でソートするにはどうしたらよいですか?

現在、値が連続であっても、常に連続であるとは限りません。

Array
(
    [0] => Array
        (
            [hashtag] => a7e87329b5eab8578f4f1098a152d6f4
            [title] => Flower
            [order] => 3
        )

    [1] => Array
        (
            [hashtag] => b24ce0cd392a5b0b8dedc66c25213594
            [title] => Free
            [order] => 2
        )

    [2] => Array
        (
            [hashtag] => e7d31fc0602fb2ede144d18cdffd816b
            [title] => Ready
            [order] => 1
        )
)

解決方法は?

を試してみてください。 ソート . もしまだ PHP 5.2 以前であれば、最初にソート関数を定義する必要があります。

function sortByOrder($a, $b) {
    return $a['order'] - $b['order'];
}

usort($myArray, 'sortByOrder');

PHP 5.3 以降では、匿名関数を使用することができます。

usort($myArray, function($a, $b) {
    return $a['order'] - $b['order'];
});

そして最後に、PHP 7 では スペースシップ演算子 :

usort($myArray, function($a, $b) {
    return $a['order'] <=> $b['order'];
});

これを多次元ソートに拡張するには、最初のソート要素がゼロの場合、2番目と3番目のソート要素を参照します。また、これはサブ要素のソートにも使用できます。

usort($myArray, function($a, $b) {
    $retval = $a['order'] <=> $b['order'];
    if ($retval == 0) {
        $retval = $a['suborder'] <=> $b['suborder'];
        if ($retval == 0) {
            $retval = $a['details']['subsuborder'] <=> $b['details']['subsuborder'];
        }
    }
    return $retval;
});

キーの関連付けを保持する必要がある場合は uasort() - 見る 配列ソート関数の比較 をマニュアルに掲載しています。