PHPで配列を効率よく並び替えたり、操作するための便利な関数をわかりやすく解説します。配列の並べ替えや要素の追加・削除、検索など、日常的によく使う基本的な操作方法を押さえて、PHPプログラミングのスキルアップに役立ててください。
PHPで配列を並び替える基本関数一覧(sort, rsort, asort, ksort)
PHPでは配列を並べ替えるための関数がいくつか用意されています。
特に覚えておきたい基本関数は以下の4つです。
- sort()
配列の値を昇順に並べ替えます。キーは再割り当てされます。 - rsort()
配列の値を降順に並べ替えます。こちらもキーは再割り当てされます。 - asort()
配列の値を昇順に並べ替えますが、キーは保持されます。 - ksort()
配列のキーを昇順に並べ替えます。
具体例
$array = ['b' => 3, 'a' => 1, 'c' => 2];
// sort() - 値を昇順に並び替え、キーは再割り当てされる
sort($array);
print_r($array);
// 出力: [1, 2, 3]
// rsort() - 値を降順に並び替え、キーは再割り当てされる
rsort($array);
print_r($array);
// 出力: [3, 2, 1]
// asort() - 値を昇順に並び替え、キーは保持される
$array = ['b' => 3, 'a' => 1, 'c' => 2];
asort($array);
print_r($array);
// 出力: ['a' => 1, 'c' => 2, 'b' => 3]
// ksort() - キーを昇順に並び替え
$array = ['b' => 3, 'a' => 1, 'c' => 2];
ksort($array);
print_r($array);
// 出力: ['a' => 1, 'b' => 3, 'c' => 2]
配列の要素を追加・削除する関数の使い方(array_push, array_pop, array_shift, array_unshift, unset)
配列の要素を動的に追加・削除するときによく使う関数です。
- array_push()
配列の末尾に要素を追加します。 - array_pop()
配列の末尾の要素を削除し、その値を返します。 - array_shift()
配列の先頭の要素を削除し、その値を返します。 - array_unshift()
配列の先頭に要素を追加します。 - unset()
指定したキーの要素を削除します。
具体例
$array = [1, 2, 3];
// array_push
array_push($array, 4);
print_r($array); // [1, 2, 3, 4]
// array_pop
$last = array_pop($array);
echo $last; // 4
// array_shift
$first = array_shift($array);
echo $first; // 1
// array_unshift
array_unshift($array, 0);
print_r($array); // [0, 2, 3]
// unset
unset($array[1]);
print_r($array); // [0, 3] (キー1の要素が削除される。キーは詰められません)
// 補足:unsetで要素を削除してもキーは再割り当てされません。必要に応じてarray_values()でキーを振り直せます。
配列の要素を検索・抽出する便利な関数(in_array, array_search, array_filter)
配列の中から条件に合う要素を探すときに使います。
- in_array()
指定した値が配列に存在するかを調べる(真偽値を返します)。 - array_search()
指定した値のキーを返します(見つからなければfalse)。 - array_filter()
コールバック関数を使い、条件に合う要素だけを抽出します。
具体例
$array = [10, 20, 30, 40];
// in_array
if (in_array(20, $array)) {
echo "20が見つかりました";
}
// array_search
$key = array_search(30, $array);
echo "30はキー{$key}にあります";
// array_filter
$result = array_filter($array, function($value) {
return $value > 25;
});
print_r($result); // [30, 40]
多次元配列の並び替えと操作方法(array_multisort, usort)
多次元配列では、複数の基準で並べ替えたい場合が多いです。
- array_multisort()
複数の配列や配列のカラムを基に一括ソートします。 - usort()
配列の要素を比較するカスタム関数でソートします。
array_multisortの例
$data = [
['name' => 'Taro', 'score' => 70],
['name' => 'Jiro', 'score' => 85],
['name' => 'Saburo', 'score' => 70],
];
$scores = array_column($data, 'score');
$names = array_column($data, 'name');
// スコア昇順、名前昇順でソート
array_multisort($scores, SORT_ASC, $names, SORT_ASC, $data);
echo "<pre>";
print_r($data);
echo "</pre>";
出力:
Array
(
[0] => Array
(
[name] => Saburo
[score] => 70
)
[1] => Array
(
[name] => Taro
[score] => 70
)
[2] => Array
(
[name] => Jiro
[score] => 85
)
)
usortの例
$data = [
['name' => 'Taro', 'score' => 70],
['name' => 'Jiro', 'score' => 85],
['name' => 'Saburo', 'score' => 70],
];
// スコアが同じ場合は名前の昇順でソートするカスタム比較関数
usort($data, function($a, $b) {
if ($a['score'] === $b['score']) {
return strcmp($a['name'], $b['name']); // 文字列の昇順比較
}
return $a['score'] <=> $b['score']; // スコアの昇順比較
});
echo "<pre>";
print_r($data);
echo "</pre>";
出力:
Array
(
[0] => Array
(
[name] => Saburo
[score] => 70
)
[1] => Array
(
[name] => Taro
[score] => 70
)
[2] => Array
(
[name] => Jiro
[score] => 85
)
)
PHPで配列操作を効率よく行うためのコツと注意点(array_map, array_reduce, array_walk)
効率的な配列処理には高階関数を使うのがおすすめです。
- array_map()
配列の全要素に関数を適用し、新しい配列を返します。 - array_reduce()
配列の要素を累積的に処理し単一の値を返します。 - array_walk()
配列の各要素に対して関数を実行し、配列の中身を直接変更可能です。
具体例
$array = [1, 2, 3, 4];
// array_map: 全要素を2倍に
$doubled = array_map(function($v) { return $v * 2; }, $array);
print_r($doubled); // [2, 4, 6, 8]
// array_reduce: 配列の合計を計算
$sum = array_reduce($array, function($carry, $item) {
return $carry + $item;
}, 0);
echo $sum; // 10
// array_walk: 直接配列の値を変更(参照渡し)
array_walk($array, function(&$v) { $v += 10; });
print_r($array); // [11, 12, 13, 14]