PHP 配列 · 2 min read · Nov 18, 2025
PHPにおける配列の詳細ガイド
PHPにおける配列の詳細ガイド
良い一日を!
これはFast PHP Articles Seriesの別の記事です。今日は配列について話します。 配列の構文、さまざまなタイプ、配列に関連するさまざまな組み込みの配列関数を学び、配列の使用を説明するさまざまな実用的な例を見ていきます。
この記事の終わりまでに、次のことができるようになるはずです:
- 配列を定義する
- さまざまなタイプの配列を使用する
- list()、each()、var_dump、print_r、var_export()など、配列に関連するさまざまな組み込み関数を使用する
- 配列を使用して基本的かつ複雑なPHPコードを書く。
- 多次元配列で作業する
- さまざまな例を通じてforeachループを理解する
しかし、配列について話す前に、非常に興味深い話をお話ししましょう。
私のオフィスの近くにDVDショップがあり、英語の映画の素晴らしいコレクションを持っています。アクション映画、ホラー映画、ロマンティック映画(はぁ - ‘深呼吸’)、ドラマ、舞台、宗教映画など、ほぼすべてのジャンルの映画を見つけることができます…。
店主はあまり教育を受けていない人ですが、それでも彼は20,000本以上のDVDを非常に簡単に管理でき、映画の名前を言うとすぐにその映画を取り出すことができます…うーん、彼はどうやってそれをやっているのでしょうか?
さて、私は彼の戦略を分析しましたので、アイテムの束を特別な方法で整理して簡単に扱うための大きな秘密を明かしましょう。
彼はすべてのDVDを上記のように異なるジャンルに分類し、ショップ内の異なる棚に特別なID / コード / 番号を付けています。彼は関連する映画を同じ棚に保管しています。各棚には、ロマンティック映画、ホラー映画など、カテゴリ名がラベル付けされています…各DVDには、そのDVDを追跡するために使用できるユニークなIDがあります。
顧客が「ダブルチーム」という映画を求めると、彼はすぐにアクション映画とラベル付けされた棚に移動し、次に「D」とラベル付けされたROWに移動します。これは、映画の名前が「D」で始まることを意味し、次に「D」の後に「O」が続く順序に迅速に到達し、「ダブルチーム」映画にたどり着きます。そして、彼は有名なDVDのIDを記憶しているので、あなたが彼に尋ねると、彼は「この名前でラベル付けされた棚からDVD # xxxxを選んでください」と言い、そこから直接それを選ぶことができます。
そして、これが非常に迅速に行われるため、特定のDVDを巨大なコレクションから迅速に取得するのは魔法のように見えます。だから、もしあなたがDVDショップを運営し始めることがあれば、次のことを行ってDVDを整理してください:
a) 同じDVDを同じ棚に保管する。
b) 各カテゴリに名前を付ける。
c) DVDのROWにラベルを付ける。
d) すべてのDVDにIDを割り当てる。
この話の教訓を覚えておき、コンピュータの世界に戻りましょう。
プログラミングでは、時々、異なる関連値を異なる方法で束ねて扱う必要があります。たとえば、トップ5の学生の名前、ポルシェ車のモデル、フォームから送信された変数などです。このような状況では、同様のタイプのデータを効率的かつ迅速に処理するために、コードとロジックを整理する必要があります。この目的のために、DVD販売者のロジックを使用できます:
- データを異なる束ねられたカテゴリに整理する。
- ROWにラベルを付ける。
- 各データ値にユニークなIDを割り当てる。
これを行うためのさまざまな技術があり、その1つが配列です。
配列の生の定義: 同じデータ / 同じ興味のデータを一緒に保管するための箱で、より良い整理と処理を可能にします。
適切な配列の定義:
「同じラベルの下に異なる変数のコレクションで、値を整理して処理しやすく保つ」
はい、これは私自身の配列の定義であり、コアコンセプトが正しければ、私の言葉で何でも定義する権利があります。
ただし、配列を「それ自体に複数の変数を含む変数の一種」と定義する人もいます。
PHPは通常の変数と配列をわずかに異なる方法で扱うことを忘れないでください。
配列の構文:
$arrayName = array ("value1?","value2?","value3?");配列名を付けるために$記号を使用し、変数と同様に等号の後にキーワード「array」を記述します。これは、パーサーに配列を扱っていることを伝え、その後、括弧内に異なる値を記述し、各値をカンマで区切って二重引用符で囲みます。
配列を定義して印刷するPHPの例:
$Top3Sites = array (“fastcreators.com”,”howtoforge.com”,”scriptsbible.com”);
print_r($Top3Sites);
?>
上記のプログラムの出力は次のようになります。
Array
(
[0] => fastcreators.com
[1] => howtoforge.com
[2] => scriptsbible.com
)
配列を印刷するためにprint_rを使用することに注意してください。なぜなら、echoやprint関数(どちらも出力を表示するために使用されます)で配列を印刷することはできないからです。ただし、配列の単一アイテムを表示するためにechoやprintを使用することはできます。たとえば:
echo $Top3Sites[0]; //fastcreators.comインデックス番号は0から始まり、1ではないことを忘れないでください。
配列の各値には、インデックス番号として知られるユニークなIDが付与されます。
別の方法として、3つの異なる変数を定義し、それらに値を割り当て、異なるステートメントを使用して表示することができます。これは、議論のために3つの値の場合には受け入れられるかもしれませんが、50または100の値を扱う場合には拒否されます。
したがって、配列はより整理されており、同じラベルの下に異なる値を収集して迅速に処理するのに役立ちます。
上記の例では、配列を一度のステップで定義して値を割り当てましたが、次のようにすることもできます:
$students = array(); //配列を定義する
//値を割り当てる $students[0] = “Haroon”;
$students[1] = “Celine”;
$students[3] = “Jennifer”;
$students[4] = “Bobby”;
?>配列の種類:
PHPには3つの異なるタイプの配列があります:
a) 数値配列: 数値IDキーを持つ配列。
b) 連想配列: 各IDキーが値に関連付けられている配列。
c) 多次元配列: 1つ以上の配列を含む配列。
では、さまざまなタイプの配列について詳しく説明しましょう。
数値配列: 数値配列は、配列の各アイテムを識別するために整数 / 数字をインデックス番号として使用します。上記で説明した例は、各アイテムのインデックス番号が整数値であるため、数値配列です。
$colours = array(“white”,”black”,”blue”);
print_r($colours);/*
出力は次のようになります。
Array
(
[0] => white
[1] => black
[2] => blue
)
*/
?>
上記の出力では、白、黒、青のインデックス番号はそれぞれ0、1、2であり、これらは数値であるため、このような配列を数値配列と呼びます。
連想配列:
時には、インデックス番号の代わりにインデックス名を使用する方が良い場合があります。たとえば、3人の学生の名前と番号を保存したい場合、最良の選択肢は、各学生の名前を配列のインデックス値として使用し、彼の番号を値として使用することです。以下の例を見てください。
$students[‘Anna’] = 90;
$students[‘Maria’] = 60;
$students[‘Jennifer’] = 40;
?>
POSTまたはGETメソッドを使用してフォームを送信すると、受信ページで各フォームフィールドの名前を配列インデックスとして、その値をインデックス値として含む同様の連想配列が得られます。いくつかのフィールドを持つHTMLフォームを作成し、それを投稿して、受信ページでグローバル配列を印刷してみてください。
print_r($_POST);
print_r($_GET);
そうすれば、連想配列が表示されます。
連想配列は、特に複雑なフォーム送信やデータベースからの動的な値を扱う際に、情報を処理するのがより簡単です。
多次元配列:
多次元配列は、自身の中に配列を含むことができ、サブ配列はさらに配列を含むことができます。
多次元配列の概念を理解するために、実世界の例に移りましょう:
デイビッドにはリッチーとメイソンという2人の息子がいます。リッチーにはスーとナターシャという2人の娘がいて、メイソンにはニコール、サルマ、アンバーという3人の娘がいます。
さて、彼らの家系図は次のようになります:

デイビッドの家系図をPHPの多次元配列で表示したい場合、次のように配列を定義できます:
$david = array
(
“richie”=>array
(
“Sue”,
“Natasha”
),
“Mason”=>array
(
“Nichole”,
“Salma”,
“Amber”
)
);これがデータを整理するために多次元配列を使用する方法です。フォームフィールドの配列を送信して、グローバル配列を印刷して出力を確認してみてください。そうすれば、サブ配列を含む多次元配列としてグローバル配列が得られます。
FOREACHループ: 前回の記事「PHPのループ」でFOREACHループについて後で話すと述べましたが、今こそそれについて話す時が来ました。
foreachループは、配列から次の値を取得し、それに対して必要なアクションを実行するために使用されます。
foreachループの基本構文は次のようになります:
FOREACH構文:
foreach ( $arrayname as $temporaryVarName ) { // foreachループ本体
//$temporaryVarNameは配列の値を保持し、
//各ループ実行で配列から次の利用可能な値を取得します
}
foreachループを使用してその動作を深く理解するためのプログラムを書いてみましょう:
$students = array(); // 配列studentsを定義する
//値を割り当てる
$students[0] = “david”;
$students[1] = “kevin”;
$students[2] = “julie”;
$students[3] = “nayyar”;
/
ここで、すべての学生の名前、つまり配列の値を一度に表示するためにforeachループを使用します /
foreach ( $students as $std_name ) {
echo $std_name . “\n”;
}
?>
上記のコードでは、$std_nameは配列の各値を取得するための一時変数として機能します。各ループ実行で、配列の次の利用可能な値が$std_nameの既存の値を上書きし、$std_nameは現在取得された値を指します。したがって、これは配列の値を1つずつ歩いているようなものです。
上記のコードの出力は次のようになります:
david
kevin
julie
nayyar
各名前を次の行に表示するために
を使用しています。
foreachループは、次に利用可能な値がないとき、つまり配列の最後の値であるNAYYARに達したときに終了します。
必要に応じてbreakステートメントを使用してループをいつでも中断できます(breakステートメントについては「PHPのスイッチを使用した意思決定」で説明しました)。
たとえば、名前がjulieの場合にループを中断したい場合は、上記のコードにIFステートメントを含めることができます:
foreach ( $students as $std_name ) {
if($std_name == “julie”) break;
echo $std_name . “\n”;
}
?>
配列とともに作業するための非常に便利な関数がいくつかあり、配列の迅速な処理を提供して効率的な結果を得ることができます。以下にいくつかを説明します:
重要な配列関数:
1) print_r関数の出力を保存する: 以前に配列の値を表示するためにprint_rを使用しましたが、print_rに追加の引数を追加して、その出力を変数に保存することができます。たとえば:
$myarray = array(“Apples”, “Oranges”, “Pears”);
$output = print_r($myarray, true);
print $output;
?>
print_rは、TRUE - 2番目の引数を使用しない場合、配列自体を表示しますが、TRUEが提供されると、その出力を変数に保存します。
2) 配列のサイズを見つける方法: 配列のサイズとは、配列が含む値の数を意味します…配列の値の数を見つけたい場合は、COUNT関数を次のように使用できます:
$myarray = array(“Apples”, “Oranges”, “Pears”);
$size = count($myarray);
print $size; // 3
?>
上記のプログラムは3を表示します。なぜなら、配列には3つの要素があるからです。
3) var_dump関数:
print_r()に似た関数で、var_dump()があります。これはほぼ同じことをしますが、
a) 変数のサイズを印刷し、
b) オブジェクトの非公開データを印刷せず、
c) 出力を返すための2番目のパラメータを渡すオプションがありません。
たとえば、最初のスクリプトをprint_r()の代わりにvar_dump()を使用するように変更すると、次の出力が得られます:
array(3) {
[0]=>
string(6) “Apples”
[1]=>
string(7) “Oranges”
[2]=>
string(5) “Pears”
}
ここでは、var_dump()が配列に3つの値があることを教えてくれ、各文字列の長さも印刷されます。教育目的では、var_dump()は変数のサイズを示すため、より良いですが、実際の作業ではprint_r()を使用したいと思うでしょう。
4) var_export関数:
var_export()という関数もあり、これはvar_dump()とprint_r()の両方に似ています。ただし、var_export()の主な違いは、変数情報をPHPコードとして使用できるスタイルで印刷することです。たとえば、テストスクリプトでprint_r()の代わりにvar_export()を使用した場合、次のような出力が得られます:
array (
0 => ‘Apples’,
1 => ‘Oranges’,
2 => ‘Pears’,
)
最後の要素の後に余分なカンマがありますが、これはPHPによって無視され、情報を直接自分のスクリプトにコピー&ペーストできます。次のように:
$foo = array (
0 => ‘Apples’,
1 => ‘Oranges’,
2 => ‘Pears’,
);
?>
5) array_shift関数:
array_shift関数は、配列の最初の要素を配列から削除し、それを受信変数に保存します。
たとえば、以前のプログラムで使用した配列からApplesを削除し、別の変数に保存したい場合、次のようにプログラムを書くことができます:
$myarray = array(“Apples”, “Oranges”, “Pears”);
$fruit = array_shift($myarray);
echo $fruit; // Apples
print_r($myarray); // OrangesとPearsがApplesなしで表示されます
?>
これは、フォームから送信された多次元配列があり、メイン配列からサブ配列を取得したい場合に非常に便利な関数です。ただし、array_shiftを使用してメイン配列からサブ配列を取得すると、受信変数(前の$fruit)は通常の変数ではなく、配列になります。
また、PHP公式マニュアルでarray_shiftに関連する他の3つの便利な関数を学ぶことをお勧めします。
array_unshift
array_pop
array_push
PHPは、PHP公式マニュアルで見つけることができる非常に多くの便利な配列関数のリストを提供しています。
ここで言いたいことは、foreachループが配列を処理する唯一の方法ではないということです。他のループ(たとえばFORループやlist()、each()関数)を使用してもできます。
配列を処理するには、配列の値の合計数、つまり配列のサイズを見つける必要があります。次のように:
for ($i = 0; $i < count($array); ++$i) {
print $array[$i];
}
?>
これは、インデックス番号として整数値を持つ数値配列にはうまく機能しますが、連想配列には適していません。
LIST()関数で配列を処理する:
PHPは、配列の値を簡単かつ迅速に処理するために使用できるLIST()関数を提供しています:
while (list($var, $val) = each($array)) {
print “$var is $val\n”;
}
?>
List()はarray()の逆を行う関数で、配列を取り、個々の変数に変換します。Each()は配列をパラメータとして受け取り、その配列内の現在のキーと値を返し、配列カーソルを進めます。「配列カーソル」は、現在読み取られている配列の要素の技術用語です。すべての配列にはカーソルがあり、自由に移動できます。これは、上記のwhileループで使用されており、配列を反復処理する必要があります。最初にeach()は最初の要素を返し、次に2番目の要素、3番目の要素、などを返し、要素が残っていない場合はfalseを返し、ループを終了します。
最初の行の意味は「配列内の現在の要素を取得し、そのキーを$varに、その値を$valに割り当て、次に配列カーソルを進める」です。
配列要素のインデックスと値の両方を取得する: 各配列要素のインデックス名とその値を読み取りたい場合は、次のようにforeachループを使用できます:
foreach ($array as $key => $val) {
print “$key = $val\n”;
}
?>
これは、連想配列を扱うときに非常に便利です。
配列は非常に深いトピックであり、さらに多くのことを議論することができます。私も配列だけで完全な本を書くことができます。しかし、この記事の目的は、配列の非常に良い理解と、配列に情報を保存し処理するためのさまざまな方法を提供することです。ただし、配列に関して具体的な質問がある場合は、遠慮なく私にメールを送るか、この記事にコメントしてください。
長い記事なので、いくつかの誤字があるかもしれません。もし見つけたら、私に報告してください。修正できるようにします。またお会いするまで、練習を続けてください。お元気で…
- ハルーン・アフマド
このシリーズの他の記事:
FAST PHPチュートリアル(パート1)
WindowsにPHPをインストールする方法(Fast PHPチュートリアルパート2)
LinuxにPHPをインストールする方法
WindowsにApacheをインストールする方法
WindowsにPHP、MySQL、Apacheをインストールするための簡単なインストーラー
PHPプログラミングの基本
PHPの演算子
PHPのIF-ELSEを使用した意思決定
PHPスイッチステートメントを使用した意思決定
PHPのループ
新しい投稿を受信箱で受け取る
スパムはありません。いつでも購読を解除できます。