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 より繰り上げる |
↑これを全部の組み合わせで実行し、最終的に昇順に並び替えられる
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に同じ値がある場合はちょっと足さないといけないっぽいけど、
これは意外と色んな場面で使えそう。
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント