はじめに
前回の記事では、配列に要素を追加・削除したり、値を検索したりする関数について解説しました。
今回は配列の関数の続きとして、並べ替え、配列と文字列の変換、合計・最大・最小などの集計、一部の取り出し、重複の削除に使う関数を解説します。
配列を並べ替える(sort・rsort)
sort()は配列の要素を小さい順(昇順)に、rsort()は大きい順(降順)に並べ替える関数です。
<?php
$prices = [300, 50, 1200, 480];
sort($prices);
print_r($prices); // 50, 300, 480, 1200
rsort($prices);
print_r($prices); // 1200, 480, 300, 50sort()とrsort()は、前回の記事で紹介した「配列そのものを変更する」タイプの関数です。並べ替えた結果は、引数に渡した$prices自体に反映されます。
$sorted = sort($prices);のように書いても、$sortedには並べ替えた配列ではなくtrueが入ります。並べ替えた後は、元の変数($prices)をそのまま使ってください。
文字列の並び順
文字列を並べ替えると、文字コードの順番で並びます。アルファベットは大文字が小文字より先になり、日本語はひらがなならおおむね五十音順になりますが、漢字は読みの順番にはなりません。
<?php
$cities = ["福岡", "東京", "大阪", "名古屋"];
sort($cities);
print_r($cities); // 名古屋, 大阪, 東京, 福岡読みの順番(大阪→東京→名古屋→福岡)にはなっていません。漢字を読みの順番で並べたいときは、ふりがなを別に持たせて、そちらで並べ替えるのが一般的です。
連想配列を並べ替える(asort・arsort・ksort)
連想配列にsort()を使うと、キーが消えて0・1・2…の番号に置き換わってしまいます。
<?php
$prices = ["ぶどう" => 300, "りんご" => 150, "みかん" => 100];
sort($prices);
print_r($prices); // [0] => 100, [1] => 150, [2] => 300(キーが消える)連想配列では、キーと値の組み合わせを保ったまま並べ替える次の関数を使います。
| 関数 | 並べ替えの基準 | 順番 |
|---|---|---|
asort() | 値 | 小さい順 |
arsort() | 値 | 大きい順 |
ksort() | キー | 小さい順 |
krsort() | キー | 大きい順 |
<?php
$prices = ["ぶどう" => 300, "りんご" => 150, "みかん" => 100];
asort($prices);
print_r($prices); // みかん => 100, りんご => 150, ぶどう => 300
arsort($prices);
print_r($prices); // ぶどう => 300, りんご => 150, みかん => 100asort()の「a」は連想配列(associative array)、ksort()の「k」はキー(key)、rsort()などの「r」は逆順(reverse)の頭文字です。この3つを組み合わせて覚えると、関数名から動きが分かるようになります。

配列と文字列を変換する(implode・explode)
implode:配列を1つの文字列につなげる
implode()は、配列の要素を指定した区切り文字でつなげて、1つの文字列にする関数です。
<?php
$colors = ["赤", "青", "黄"];
echo implode("、", $colors); // 赤、青、黄
echo implode(" / ", $colors); // 赤 / 青 / 黄implode(区切り文字, 配列)の順番で書きます。配列の中身を画面に一覧表示したいときや、CSVのようにカンマ区切りの文字列を作りたいときに便利です。
explode:文字列を区切って配列にする
explode()は反対に、文字列を指定した区切り文字で分割して、配列にする関数です。
<?php
$text = "東京,大阪,名古屋";
$cities = explode(",", $text);
print_r($cities); // [0] => 東京, [1] => 大阪, [2] => 名古屋explode(区切り文字, 文字列)の順番で書きます。フォームにカンマ区切りで入力されたキーワードや、CSVファイルの1行を分解するときなどに使います。
区切り文字は、文字列の中の区切りと完全に一致している必要があります。"a, b"のようにカンマの後ろに空白がある文字列を","で分割すると、2つ目の要素は" b"(先頭に空白付き)になります。
合計・最大・最小を求める(array_sum・max・min)
数値の配列は、次の関数で集計できます。
<?php
$scores = [80, 65, 92];
echo array_sum($scores); // 237(合計)
echo max($scores); // 92(最大)
echo min($scores); // 65(最小)
$average = array_sum($scores) / count($scores);
echo round($average, 1); // 79(平均)平均を求める関数はないため、array_sum()で求めた合計をcount()で求めた要素数で割ります。round(値, 1)は、小数第1位までに四捨五入する関数です(79.0の場合は「79」と表示されます)。
配列の記事の実務サンプルでは、for文で1つずつ足して合計を求めましたが、配列の値をそのまま合計するだけならarray_sum()の1行で済みます。
max()・min()に空の配列を渡すと、ValueErrorというエラーで処理が止まります。また、空の配列で平均を求めると0で割ることになりエラーになります。データが0件になる可能性があるときは、先にcount()で件数を確認しましょう。
配列の一部を取り出す(array_keys・array_slice)
array_keys:キーだけを取り出す
array_keys()は、配列のキーだけを並べた新しい配列を返します。値だけを取り出すarray_values()(前回の記事で紹介)と対になる関数です。
<?php
$user = ["name" => "田中", "age" => 30, "city" => "東京"];
print_r(array_keys($user)); // name, age, city
print_r(array_values($user)); // 田中, 30, 東京array_slice:指定した範囲を取り出す
array_slice()は、配列の指定した位置から、指定した数だけ要素を取り出した新しい配列を返します。
<?php
$letters = ["A", "B", "C", "D", "E"];
print_r(array_slice($letters, 0, 3)); // A, B, C(先頭から3つ)
print_r(array_slice($letters, 1, 2)); // B, C(1番目から2つ)
print_r(array_slice($letters, -2)); // D, E(最後から2つ)array_slice(配列, 開始位置, 個数)の順番で書きます。開始位置は0から数え、マイナスの値を指定すると末尾から数えます。個数を省略すると、最後まで取り出します。「上位3件だけ表示する」「最新の5件だけ表示する」といった場面でよく使います。
重複を取り除く(array_unique)
array_unique()は、配列から重複している値を取り除いた新しい配列を返します。
<?php
$prefs = ["東京", "大阪", "東京", "福岡", "大阪"];
$unique = array_unique($prefs);
print_r($unique); // [0] => 東京, [1] => 大阪, [3] => 福岡同じ値が2つ以上あるときは、最初に出てきたものだけが残ります。ただし、インデックスは元のままなので、上の例では2が抜けています。0から振り直したいときは、前回紹介したarray_values()と組み合わせます。
<?php
$prefs = ["東京", "大阪", "東京", "福岡", "大阪"];
$unique = array_values(array_unique($prefs));
print_r($unique); // [0] => 東京, [1] => 大阪, [2] => 福岡今回の関数のまとめ
| 関数 | 動き | 元の配列 |
|---|---|---|
sort()・rsort() | 値で並べ替える(キーは消える) | 変わる |
asort()・arsort() | キーを保って値で並べ替える | 変わる |
ksort()・krsort() | キーで並べ替える | 変わる |
implode(区切り, 配列) | 配列をつなげた文字列を返す | 変わらない |
explode(区切り, 文字列) | 文字列を分割した配列を返す | ― |
array_sum()・max()・min() | 合計・最大・最小を返す | 変わらない |
array_keys() | キーだけの配列を返す | 変わらない |
array_slice(配列, 開始, 個数) | 一部を取り出した配列を返す | 変わらない |
array_unique() | 重複を取り除いた配列を返す | 変わらない |
実務サンプル(テストの成績ランキングを作る)
名前と点数の連想配列から、上位3名のランキングと、全体の平均点・最高点・最低点を表示するサンプルです。

<?php
// 名前 => 点数(データベースから取得した想定)
$scores = [
"田中" => 72,
"佐藤" => 88,
"鈴木" => 95,
"高橋" => 64,
"伊藤" => 88,
];
// ① 集計(並べ替えの前でも後でも結果は同じ)
$count = count($scores);
$average = round(array_sum($scores) / $count, 1);
$max = max($scores);
$min = min($scores);
// ② 点数の高い順に並べ替え、上位3名を取り出す
arsort($scores);
$top3 = array_slice($scores, 0, 3);
?>
<h2>成績ランキング(上位3名)</h2>
<ol>
<?php foreach ($top3 as $name => $score): ?>
<li><?php echo $name; ?>さん:<?php echo $score; ?>点</li>
<?php endforeach; ?>
</ol>
<p>
受験者<?php echo $count; ?>名 / 平均<?php echo $average; ?>点 /
最高<?php echo $max; ?>点 / 最低<?php echo $min; ?>点
</p>ブラウザには次のように表示されます。
成績ランキング(上位3名)
1. 鈴木さん:95点
2. 佐藤さん:88点
3. 伊藤さん:88点
受験者5名 / 平均81.4点 / 最高95点 / 最低64点
ポイントは次のとおりです。
- 名前(キー)と点数(値)の組み合わせを保ちたいので、
sort()ではなくarsort()で並べ替えています array_slice()は、連想配列の文字列のキーをそのまま残して取り出すため、foreachで名前と点数を一緒に表示できます- 同じ点数(佐藤さんと伊藤さん)は、元の配列の順番のまま並びます
よくある質問・エラー対処
Q. sortで並べ替えた結果を変数に入れたら「1」と表示されます
→ sort()は元の配列そのものを並べ替え、戻り値としては成功を表すtrue(表示すると「1」)を返します。$結果 = sort($配列);ではなく、sort($配列);の後に$配列を使ってください。
Q. 連想配列を並べ替えたら、キーが0・1・2になってしまいました
→ sort()やrsort()はキーを保持しません。連想配列を値で並べ替えるときはasort()・arsort()、キーで並べ替えるときはksort()・krsort()を使ってください。
Q. max(): Argument #1 ($value) must contain at least one elementというエラーが出ます
→ max()やmin()に空の配列を渡しています。if (count($配列) > 0)のように、要素があるときだけ実行してください。
Q. 空の文字列をexplodeしたら、要素が1つの配列になりました
→ explode(",", "")は、空文字列が1つ入った配列(要素数1)を返します。入力が空の可能性があるときは、先にif ($文字列 !== "")で空かどうかを確認してから分割してください。
おわりに(まとめ)
配列の関数を使うと、並べ替えや集計、文字列との変換を短く書けます。
- ✅ sort・rsortは値で並べ替える(連想配列ではキーが消える)
- ✅ 連想配列はasort・arsort(値)、ksort・krsort(キー)で並べ替える
- ✅ implodeは配列を文字列に、explodeは文字列を配列に変換する
- ✅ array_sum・max・minで合計・最大・最小を求められる
- ✅ array_sliceで範囲を取り出し、array_uniqueで重複を取り除ける
次回は、決まった処理をまとめて名前を付け、何度も呼び出せるようにする「関数の作り方」について解説します。
次回は、よく使う処理に名前を付けてまとめ、何度でも呼び出せるようにする「関数」の作り方について解説予定です。
この記事が、少しでも誰かのお役に立てれば幸いです。
関連記事
当サイトの記事で使用したVBAなどのサンプルをDLできます
この記事のサンプルはありません!
ダウンロードページへは下のカードをクリックすればジャンプできます。
よろしければご利用ください!

