DESIGNMAP

  1. TOP
  2. 公開講座
  3. ゼロから始めるPHP入門
  4. 配列 ー ゼロから始めるPHP入門(PHP7)【Vol.8】

配列 ー ゼロから始めるPHP入門(PHP7)【Vol.8】

配列は複数の値を一つにまとめて管理できるデータ型です。

配列の作成

実際にコードを書きながら配列を解説していきましょう。

Atomを起動して、新規ファイルを作ります。「PHPの実行」で作った[php-study]フォルダ内に「sample8-1.php」として保存します。「PHPの実行」と同じようにHTMLのコードをAtomで生成させて、body要素内に以下のコードを書きます。Apacheを起動して、ChromeからPHPを実行してください。

※PHPの実行方法の詳しい手順は「PHPの実行」をご覧ください。これ以降のコードに関しても任意のファイル名で作成して、実際にPHPを実行しながら読む進めていってください。

<?php
$colors = array("赤", "青", "白", "緑");
$person = array("name" => "太郎", "hobby" => "切手収集");
echo "<pre>";
var_dump($colors);
var_dump($person);
echo "</pre>";
?>

実行結果:

array(4) {
  [0]=>
  string(3) "赤"
  [1]=>
  string(3) "青"
  [2]=>
  string(3) "白"
  [3]=>
  string(3) "緑"
}
array(2) {
  ["name"]=>
  string(6) "太郎"
  ["hobby"]=>
  string(12) "切手収集"
}

配列はキーが=>でつながれペアになって、カンマ区切りでデータが続きます。キーと値のペアを要素といいます。配列は複数の要素を管理することができます。

配列を作る時に、下記のようにキーを明示しないこともできます。

$colors = array("赤", "青", "白", "緑");

この場合、実行結果を見ますと、ゼロ始まりの整数がキーとして自動でつきます。

$colors = array(0 => "赤", 1 => "青", 2 => "白", 3 => "緑");

と整数のキーを明示的に書くことも可能です。

PHPの配列はすべてが連想配列

一般的なプログラム言語の場合、キーが整数の場合を配列、キーが文字列の場合を連想配列(マップ、辞書、ハッシュ)というように仕様が分かれている場合が多いのですが、PHPの場合、配列と連想配列の区別がありません。全てが連想配列です。以降、本講座では単に配列と呼ぶことにします。

短縮配列構文(PHP5.4以降)

PHP5.4以降は短縮配列構文がサポートされました。

$colors = ["赤", "青", "白", "緑"];
$person = ["name" => "太郎", "hobby" => "切手収集"];

要素の取り出し

配列の値を取り出す時は、配列が代入されている変数にキーを添えると取り出せます。

<?php
$person = array("name" => "太郎", "hobby" => "切手収集");
echo "こんにちは{$person['name']}さん。趣味は{$person['hobby']}なんですね。";
?>

実行結果:

こんにちは太郎さん。趣味は切手収集なんですね。
<?php
$colors = array("赤", "青", "白", "緑");
echo "好きな色は{$colors[0]}です。";
?>

実行結果:

好きな色は赤です。

配列には様々なデータ型が混在できて、値の重複も可能

値を重複したり、値のデータ型は様々なデータ型が混在できます。

<?php
$mix = array("赤", "赤", true, 3);
echo "<pre>";
var_dump($mix);
echo "</pre>";
?>
array(4) {
  [0]=>
  string(3) "赤"
  [1]=>
  string(3) "赤"
  [2]=>
  bool(true)
  [3]=>
  int(3)
}

キーが重複した場合は、後から書いた値で上書きされる

配列でキーが重複した場合はエラーにはならず、値は追加されません。後から書いた値で上書きされます。

<?php
$person = array("name" => "太郎", "name" => "二郎");
echo "<pre>";
var_dump($person);
echo "</pre>";
?>

実行結果:

array(1) {
  ["name"]=>
  string(6) "二郎"
}

配列の値の書き換え

キーを指定することで、配列の値を書き換えることが可能です。

<?php
$colors = array("赤", "白", "青");
$colors[0] = '紫';
echo "<pre>";
var_dump($colors);
echo "</pre>";
?>

実行結果:

array(3) {
  [0]=>
  string(3) "紫"
  [1]=>
  string(3) "白"
  [2]=>
  string(3) "青"
}

配列の末尾へ要素の追加

[]array_push関数の二つの方法があります。

<?php
$colors = array();
$colors[] = "赤";
$colors[] = "青";
$colors[] = "白";
echo "<pre>";
var_dump($colors);
echo "</pre>";
?>

実行結果:

array(3) {
  [0]=>
  string(3) "赤"
  [1]=>
  string(3) "青"
  [2]=>
  string(3) "白"
}
<?php
$colors = array();
array_push($colors, "赤");
array_push($colors, "青");
array_push($colors, "白");
echo "<pre>";
var_dump($colors);
echo "</pre>";
?>

実行結果:

array(3) {
  [0]=>
  string(3) "赤"
  [1]=>
  string(3) "青"
  [2]=>
  string(3) "白"
}

配列の末尾の値の取り出し

array_pop関数を使うと、配列の一番後ろの値を取り出すことができます。元の配列の一番後ろの要素は削除されます。

<?php
$colors = array("赤", "白", "青");
$last_color = array_pop($colors);
echo $last_color;
echo "<pre>";
var_dump($colors);
echo "</pre>";
?>

実行結果:

青
array(2) {
  [0]=>
  string(3) "赤"
  [1]=>
  string(3) "白"
}

配列の先頭の値の取り出し

array_shift関数を使うと、配列の一番前の値を取り出すことができます。元の配列の一番前の要素は削除されます。

<?php
$colors = array("赤", "白", "青");
$first_color = array_shift($colors);
echo $first_color;
echo "<pre>";
var_dump($colors);
echo "</pre>";
?>

実行結果:

赤
array(2) {
  [0]=>
  string(3) "白"
  [1]=>
  string(3) "青"
}

配列の先頭へ値の追加

array_unshift関数を使うと、配列の一番前に値を追加することができます。

<?php
$colors = array("赤", "白", "青");
array_unshift($colors, "紫");
echo "<pre>";
var_dump($colors);
echo "</pre>";
?>

実行結果:

array(4) {
  [0]=>
  string(3) "紫"
  [1]=>
  string(3) "赤"
  [2]=>
  string(3) "白"
  [3]=>
  string(3) "青"
}

array_splice関数を使った配列の要素の追加、置換、削除

array_splice(操作したい配列, 抽出開始位置, 取り出す要素数)と指定すると、指定の範囲の要素が抽出され、配列から削除されます。

<?php
$colors = array("赤", "白", "青", "緑", "紫");
$some_colors = array_splice($colors, 1, 2);

echo "<pre>";
var_dump($some_colors);
var_dump($colors);
echo "</pre>";
?>

実行結果:

array(2) {
  [0]=>
  string(3) "白"
  [1]=>
  string(3) "青"
}
array(3) {
  [0]=>
  string(3) "赤"
  [1]=>
  string(3) "緑"
  [2]=>
  string(3) "紫"
}

取り出す要素数を省略した場合、配列の最後の要素までが抽出され、配列から削除されます。

<?php
$colors = array("赤", "白", "青", "緑", "紫");
$some_colors = array_splice($colors, 1);

echo "<pre>";
var_dump($some_colors);
var_dump($colors);
echo "</pre>";
?>
array(4) {
  [0]=>
  string(3) "白"
  [1]=>
  string(3) "青"
  [2]=>
  string(3) "緑"
  [3]=>
  string(3) "紫"
}
array(1) {
  [0]=>
  string(3) "赤"
}

array_splice(操作したい配列, 抽出開始位置, 取り出す要素数, 削除箇所に挿入する配列)と指定すると、指定の範囲の要素が抽出され、削除されます。さらに削除箇所に要素が追加されます。

<?php
$colors = array("赤", "白", "青", "緑", "紫");
$some_colors = array_splice($colors, 2, 2, array("ピンク", "黒"));

echo "<pre>";
var_dump($some_colors);
var_dump($colors);
echo "</pre>";
?>
array(2) {
  [0]=>
  string(3) "青"
  [1]=>
  string(3) "緑"
}
array(5) {
  [0]=>
  string(3) "赤"
  [1]=>
  string(3) "白"
  [2]=>
  string(9) "ピンク"
  [3]=>
  string(3) "黒"
  [4]=>
  string(3) "紫"
}

取り出す要素数をゼロで指定すると、要素は削除されず、抽出開始位置の前に、要素を割り込んで追加ができます。

<?php
$colors = array("赤", "白", "青", "緑", "紫");
$some_colors = array_splice($colors, 2, 0, array("ピンク", "黒"));

echo "<pre>";
var_dump($some_colors);
var_dump($colors);
echo "</pre>";
?>
array(0) {
}
array(7) {
  [0]=>
  string(3) "赤"
  [1]=>
  string(3) "白"
  [2]=>
  string(9) "ピンク"
  [3]=>
  string(3) "黒"
  [4]=>
  string(3) "青"
  [5]=>
  string(3) "緑"
  [6]=>
  string(3) "紫"
}

配列に指定の要素があるかどうかのチェック

in_array関数を使うと配列に値が存在すればtrueを、そうでなければflaseを返します。

<?php
$colors = array("赤", "白", "青");
if (in_array("赤", $colors)){
  echo "赤は存在します。";
  echo "<br>";
}
var_dump(in_array("赤", $colors));
?>

実行結果:

赤は存在します。
bool(true)

配列同士の結合

array_merge関数を使うと配列と配列の結合ができます。

<?php
$color1 = array("白", "赤", "緑");
$color2 = array("黒", "紫");
$merge_color = array_merge($color1, $color2);

echo "<pre>";
var_dump($merge_color);
echo "</pre>";
?>

実行結果:

array(5) {
  [0]=>
  string(3) "白"
  [1]=>
  string(3) "赤"
  [2]=>
  string(3) "緑"
  [3]=>
  string(3) "黒"
  [4]=>
  string(3) "紫"
}

キーが重複した場合、値は上書きされます。

<?php
$person1 = array("name" => "太郎");
$person2 = array("name" => "二郎");
$merge_person = array_merge($person1, $person2);

echo "<pre>";
var_dump($merge_person);
echo "</pre>";
?>

実行結果:

array(1) {
  ["name"]=>
  string(6) "二郎"
}

array_merge_recursive関数を使うと、キーが重複した場合でも値を追加することができます。ただし、値の部分が別な配列になります。配列の中に配列が入れ子で入るデータ構造になります。

<?php
$person1 = array("name" => "太郎");
$person2 = array("name" => "二郎");
$merge_person = array_merge_recursive($person1, $person2);

echo "<pre>";
var_dump($merge_person);
echo "</pre>";
?>

実行結果:

array(1) {
  ["name"]=>
  array(2) {
    [0]=>
    string(6) "太郎"
    [1]=>
    string(6) "二郎"
  }
}

配列の要素の個数

count関数を使うと配列の要素数を取得することができます。

<?php
$colors = array("白", "青", "緑");
$num = count($colors);
echo $num;
?>

実行結果:

3

配列から文字列への変換

implode関数を使うと、配列の値を取り出しひとつの文字列に結合することができます。implode(連結に使用する文字列,  操作したい配列)と書きます。

<?php
$colors = array("白", "青", "緑");
$str = implode(",", $colors);
echo $str;
echo "<br>";
$str = implode("と", $colors);
echo $str;
?>

実行結果:

白,青,緑
白と青と緑

PHPで用意されている配列の関数

今回いくつか配列を操作する関数を紹介しましたが、PHPでは標準でさらに多くの配列の関数が用意されています。一覧はhttp://php.net/manual/ja/ref.array.phpをご覧ください。他の言語と比べてもこれは多い方だと思います。標準関数の手厚さはPHPの特徴の一つです。

スポンサーリンク

プロフィール

DESIGNMAP
ディレクター
ON VISITINGを制作・運営。
お問い合わせ