2020-10-19に投稿

【php】連想配列を、指定した配列の順番で並び替える (usort)

https://www.php.net/manual/ja/function.usort.php
配列を並び替える関数の一つで、自分で指定した条件通りに並び替えることができる

function cmp($a, $b) {
  if ($a== $b) {
    return 0;
  }
  return ($a< $b) ? -1 : 1;
}

$array = [3, 2, 5, 6, 1];
usort($array , "cmp");

foreach ($array  as $key => $value) {
    echo "$key: $value\n";
}

出力結果:

0: 1
1: 2
2: 3
3: 5
4: 6

呼び出し方は、
usort(配列, コールバック関数)

コールバック関数の返り値を使って並び替えをする。

返り値 処理
0 そのまま(並び替えない)
-1 $aの順番を$bより繰り下げる
1 $aの順番を$bより繰り上げる

↑これを全部の組み合わせで実行し、最終的に昇順に並び替えられる

usortを使って、連想配列を任意の順番に並び替える

teratailの方で見つけて感動したのでメモ。(メモと言うかもろコピペですみません)
https://teratail.com/questions/93290

$sortID=[3, 5, 12, 23, 67];
$array = [
  ['id'=>3,'name'=>"test1"],
  ['id'=>67,'name'=>"test2"],
  ['id'=>23,'name'=>"test3"],
  ['id'=>12,'name'=>"test4"],
  ['id'=>5,'name'=>"test5"],
];    

usort($array, function($a, $b) use ($sortID){
  return array_search($a["id"], $sortID) > array_search($b["id"], $sortID);
});
print_r($array);

出力結果:

Array
(
    [0] => Array
        (
            [id] => 3
            [name] => test1
        )

    [1] => Array
        (
            [id] => 5
            [name] => test5
        )

    [2] => Array
        (
            [id] => 12
            [name] => test4
        )

    [3] => Array
        (
            [id] => 23
            [name] => test3
        )

    [4] => Array
        (
            [id] => 67
            [name] => test2
        )
)

おお~。
$sortIDに同じ値がある場合はちょっと足さないといけないっぽいけど、
これは意外と色んな場面で使えそう。

ツイッターでシェア
みんなに共有、忘れないようにメモ

みみみみみ

1歳と7ヶ月くらいの赤ちゃんです。

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント