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]