多次元配列を値で並べ替える方法 質問する

多次元配列を値で並べ替える方法 質問する

この配列を「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
        )
)

ベストアンサー1

試してみる並べ替えPHP 5.2 以前を使用している場合は、まずソート関数を定義する必要があります。

function sortByOrder($a, $b) {
    if ($a['order'] > $b['order']) {
        return 1;
    } elseif ($a['order'] < $b['order']) {
        return -1;
    }
    return 0;
}

usort($myArray, 'sortByOrder');

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

usort($myArray, function($a, $b) {
    if ($a['order'] > $b['order']) {
        return 1;
    } elseif ($a['order'] < $b['order']) {
        return -1;
    }
    return 0;
});

PHP 7では、宇宙船オペレーター:

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

最後に、PHP 7.4 では矢印関数を使用して少し整理することができます。

usort($myArray, fn($a, $b) => $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()を参照してください。配列ソート関数の比較マニュアルに記載されています。

おすすめ記事