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