PHPでは、複数の関連する値を効率的に管理するために配列(array)が不可欠なデータ構造です。単一の変数で数十もの値を扱うのは非現実的であり、配列はそのような課題を解決するための標準的な仕組みです。
配列の作成と初期化
配列は3つの主な方法で生成できます。以下にそれぞれのスタイルを、現代的な命名規則と明確なロジックで再構成します:
<?php
// 方法1:インデックス付き配列(数値キー)の逐次代入
$numbers = [];
$numbers[0] = 42;
$numbers[1] = -7.5;
$numbers[2] = "PHP";
// 方法2:array() 関数による初期化(推奨)
$items = array(42, -7.5, "PHP");
// 方法3:連想配列(文字列キー)の定義
$profile = [
"username" => "dev_user",
"score" => 94.3,
"status" => "active"
];
?>
配列の走査と処理
要素へのアクセスや反復処理には、目的に応じた異なるアプローチがあります。
forループ:数値インデックスを持つ配列に適していますが、count()の呼び出し回数を減らすために事前に長さをキャッシュすることを推奨します。foreach:連想配列や可読性・保守性を重視する場合に最適です。キーと値の両方を同時に取得できます。
以下の例では、合計と平均を計算し、結果を小数点第2位まで丸めています:
<?php
$data = [18, 29, 36.5, 41, 22.8, 33];
$total = 0;
$length = count($data); // 計算コスト削減のため、1度だけ評価
for ($i = 0; $i < $length; $i++) {
$total += $data[$i];
}
$average = round($total / $length, 2);
echo "<p>合計: {$total}</p>";
echo "<p>平均: {$average}</p>";
?>
配列の動的変更と検証
PHPの配列は柔軟で、実行時にサイズを拡張したり、要素を削除したりできます。
unset():特定のキーを削除しますが、残りのインデックスは再番号付けされません。is_array():変数が配列型かどうかを安全に判定します。print_r()およびvar_dump():デバッグ用途で構造を可視化します。
<?php
$sample = [10, 20, 30, 40];
unset($sample[2]); // キー2(値30)を削除
// 結果: [0 => 10, 1 => 20, 3 => 40]
var_dump(is_array($sample)); // bool(true)
var_dump(is_array("not an array")); // bool(false)
?>
文字列と配列の相互変換
explode() を用いると、区切り文字に基づいて文字列を配列に分割できます。逆に、implode() を使えば配列を結合して文字列に変換可能です。
<?php
$csv = "apple,banana,cherry,date";
$fruits = explode(",", $csv);
// 出力: Array ( [0] => apple [1] => banana [2] => cherry [3] => date )
print_r($fruits);
// 再結合
$joined = implode(" | ", $fruits);
echo $joined; // "apple | banana | cherry | date"
?>
配列比較演算子の違い
配列同士の比較には、意味論が異なる演算子があります:
==:キーと値が一致すれば真(順序は無視)===:キー・値・順序・型のすべてが一致する場合のみ真+:右辺の要素を左辺に「マージ」。重複キーは左辺が優先されます
<?php
$a = ['x' => 1, 'y' => 2];
$b = ['y' => 99, 'z' => 3];
var_dump($a == $b); // bool(false) — yの値が異なる
var_dump($a + $b); // ['x' => 1, 'y' => 2, 'z' => 3]
?>
実践例:フォーム入力の配列処理
ユーザーがスペース区切りで数値を入力した場合の処理フローを示します。
input_form.php
<form method="post" action="process.php">
<label>数値をスペース区切りで入力:</label><br>
<input type="text" name="values" required><br>
<button type="submit">計算開始</button>
</form>
process.php
<?php
if (!empty($_POST['values'])) {
$raw = trim($_POST['values']);
$values = array_filter(
explode(' ', $raw),
function($v) { return is_numeric($v); }
);
if (empty($values)) {
die("有効な数値が見つかりませんでした。");
}
$sum = array_sum($values);
$avg = round($sum / count($values), 2);
echo "<h2>解析結果</h2>";
echo "<p>入力値: " . implode(", ", $values) . "</p>";
echo "<p>合計: {$sum}</p>";
echo "<p>平均: {$avg}</p>";
}
?>