RAKUS Developers Blog | ラクス エンジニアブログ

株式会社ラクスのITエンジニアによる技術ブログです。

PHPの配列機能のまとめ

f:id:UKoni:20201223191948p:plain

こんにちはラクス開発エンジニアのUKoniです。 社会人になってPHP開発するようになったら、配列の機能がいろいろあることを知りました。 「あれってどうするんだっけ?」といちいち調べるのもあれなんで、ここにまとめます。 PHPの配列の機能を忘れてしまったときに活用してもらえるとうれしいです。

配列とは

配列とは、複数の値を格納できる変数のことです。配列は値ごとに添字を持ちます。

PHPでの配列の変数作成

PHPで配列では、array()、または[](角括弧)で作成することができます。 [](角括弧)での配列の作成は、PHP5.4以降で使用できます。 この記事では[](角括弧)の書き方で進めていきます。 では、実際に作成します。

<?php
$country = [
  'Japan',
  'USA'
];

print_r($country);

実行すると以下のようになります。

Array (
  [0] => Japan
  [1] => USA
)

配列に値を格納することで添字に番号が付けられます。 番号は配列内で使用されている整数の添字の最大値+1が次に追加される値の添字になります。

また、添字に番号の代わりに好きな文字列をつけることができます。 このような、文字列を添字にもつ配列を「連想配列」と呼びます。

<?php
$capital = [
          'Japan' => 'Tokyo',
          'USA' => 'Washington D.C.'
];

echo $capital['Japan'];

結果:

Tokyo

PHPでは配列と連想配列に差はなく、1つの配列で番号の添字と文字列の添字を同時に使うことができます。

多次元配列

多次元配列とは、配列の中に配列を格納している配列です。 PHPでは多次元配列を以下のように生成します。

<?php
$numbers = [
    'odd' => ['one','three', 'five'],
    'even' => ['two','four', 'six']
];

echo $numbers['even'][0];

結果:

two

配列と繰り返し

条件を満たすまで同じ処理をくり返します。

foreach文の場合

PHPの配列をforeach文で処理するときは、以下のように実装します。

<?php
  $prefectures = [
      'Tokyo',
      'Osaka',
      'Kyoto',
      'Fukuoka',
      'Aichi',
      'Kanagawa'
  ];

  foreach ($prefectures as $value) {
    echo $value . '<br>';
  }

上記のプログラムでは、foreach文の条件式内の$valueに配列の値が入ります。 そして、foreach文内の処理が完了すると、$valueの値は配列の次の値に変わります。 これを配列の最後の値の処理が終わるまで繰り返します。 実行結果は以下になります。

Tokyo
Osaka
Kyoto
Fukuoka
Aichi
Kanagawa

また、連想配列では添字と値を同時に取得することができます。

<?php
  $prefectures = [
      'Tokyo' => '東京',
      'Osaka' => '大阪',
      'Kyoto' => '京都',
      'Fukuoka' => '福岡',
      'Aichi' => '愛知',
      'Kanagawa' => '神奈川'
  ];

  foreach ($prefectures as $key => $value) {
    echo $key . ' : ' . $value . '<br>';
  }

foreach文の条件式内の$key$valueと紐づいた添字が入ります。 実行結果は以下になります。

Tokyo : 東京
Osaka : 大阪
Kyoto : 京都
Fukuoka : 福岡
Aichi : 愛知
Kanagawa : 神奈川

for文の場合

先ほどはforeach文での実装を紹介しましたが、for文でも実装は可能です。

<?php
  $prefectures = [
      'Tokyo',
      'Osaka',
      'Kyoto',
      'Fukuoka',
      'Aichi',
      'Kanagawa'
  ];

  for ($i = 0; $i < count($prefectures); $i++) {
    echo $prefectures[$i] . '<br>';
  }

実行結果は以下のようになります。

Tokyo
Osaka
Kyoto
Fukuoka
Aichi
Kanagawa

PHPでの配列の操作

ここにはPHPで配列の操作の方法をまとめています。

追加

PHPの配列に新たな値を追加します。

1. 式で追加する

PHPで配列に値を追加する式は以下の通りです。

<?php
$prefectures = [
    'Tokyo',
    'Osaka'
];

$prefectures[] = 'Aichi';
//連想配列の場合
$prefectures['Kyoto'] = 'Kyoto';
print_r($prefectures);

結果:

Array (
  [0] => Tokyo
  [1] => Osaka
  [2] => Aichi
  [Kyoto] => Kyoto
)
2. 1つ以上の値の追加(array_push関数)

1つ以上の値を配列の最後に追加します。

<?php
$prefectures = [
    'Tokyo',
    'Osaka'
];

array_push($prefectures, 'Kyoto', 'Fukuoka', 'Aichi');
print_r($prefectures);

結果:

Array (
  [0] => Tokyo
  [1] => Osaka
  [2] => Kyoto
  [3] => Fukuoka
  [4] => Aichi
)

削除

PHPの配列の値を削除します。

1. 特定の値の削除(unset関数)

配列から指定した添字と紐づいている値を削除します。

<?php
$prefectures = [
  'Tokyo',
  'Osaka',
  'Kyoto'
];

unset($prefectures[0]);
print_r($prefectures);

結果:

Array (
  [1] => Osaka
  [2] => Kyoto
)
2. 重複した値の削除(array_unique関数)

配列内で重複している値を削除します。 配列の先頭から最初に当たった値を残して、それ以降同じ値があると削除します。

<?php
$number = [
  'A' => 10,
  0 => 15,
  1 => 10,
  'B' => 13,
  'C' => 15
];

$result = array_unique($number);
print_r($result);

結果:

Array (
  [A] => 10
  [0] => 15
  [B] => 13
)

並び替え

PHPで配列内のデータの並び替えを行う関数は以下の表の通りです。

関数説明
sort関数値の昇順に並び替える。並び替え後の値に新しく番号の添字を割り当てる。
rsort関数値の降順に並び替える。並び替え後の値に新しく番号の添字を割り当てる。
asort関数値と添字を紐づけたまま、値の昇順に並び替える。
arsort関数値と添字を紐づけたまま、値の降順に並び替える。
ksort関数値と添字を紐づけたまま、添字の昇順に並び替える。
krsort関数値と添字を紐づけたまま、添字の降順に並び替える。

では実際に使ってみましょう。 商品名を添字にし、値を値段にした$menuという配列を用意します。 この配列にsort関数を使うとこのようになる。

<?php
$menu = [
 'pasta' => 800,
 'hamburger' => 1000,
 'sashimi' => 2000,
 'sarada' => 500,
 'juice' =>300
];

sort($menu);
print_r($menu);

結果:

Array (
  [0] => 300
  [1] => 500
  [2] => 800
  [3] => 1000
  [4] => 2000
)

このように値段の安い順になりますが、商品名が番号に変わっています。 ではこれをasort関数にするとどうなるでしょうか。

<?php
$menu = [
 'pasta' => 800,
 'hamburger' => 1000,
 'sashimi' => 2000,
 'sarada' => 500,
 'juice' =>300
];

asort($menu);
print_r($menu);

結果:

Array (
  [juice] => 300
  [sarada] => 500
  [pasta] => 800
  [hamburger] => 1000
  [sashimi] => 2000
)

このように商品名を添字にもったまま、値段の安い順にはなります。 最後にksort関数を使います。

<?php
$menu = [
 'pasta' => 800,
 'hamburger' => 1000,
 'sashimi' => 2000,
 'sarada' => 500,
 'juice' =>300
];

ksort($menu);
print_r($menu);

結果:

Array (
 [hamburger] => 1000
 [juice] => 300
 [pasta] => 800
 [sarada] => 500
 [sashimi] => 2000
)

このように商品名の昇順に並びます。

検索

PHPの配列内の値や添字、配列の要素の数などを調べます。

1. 配列内の値の全取得(array_values関数)

PHPの配列内のすべての値を取得します。 ただし、添字は一緒に取得はできません。

<?php
$prefectures = [
  'Tokyo' => 'Shinjuku',
  'Osaka' => 'Osaka',[f:id:UKoni:20201223191948p:plain]
  'Kyoto' => 'Kyoto',
  'Fukuoka' => 'Fukuoka',
  'Aichi' => 'Nagoya',
  'Kanagawa' => 'Yokohama'
];

$result = array_values($prefectures);
print_r($result);

結果:

Array (
  [0] => Shinjuku
  [1] => Osaka
  [2] => Kyoto
  [3] => Fukuoka
  [4] => Nagoya
  [5] => Yokohama
)
2. 指定した値が配列内にあるか(in_array関数)

PHPの配列内に指定した値があるかを調べます。 array_values関数とは違い、値を取得はしません。

<?php
$productList = [
  'banana',
  'orange',
  'mellon',
  'lemon'
];

if (in_array('banana', $productList)) {
  echo 'バナナは取り扱っています。';
} else {
  echo 'バナナは取り扱っていません。';
}

結果:

バナナは取り扱っています。
3. 配列内の添字の取得(array_keys関数)

PHPの配列の中のすべての添字を取得します。

<?php
$fruits = [
  'banana' => 'yellow',
  'orange' => 'orange',
  'mellon' => 'green',
  'lemon' => 'yellow'
];

print_r(array_keys($fruits));

結果:

Array (
  [0] => banana
  [1] => orange
  [2] => mellon
  [3] => lemon
)

また、指定した値を持つ添字を調べることもできます。

<?php
$fruits = [
  'banana' => 'yellow',
  'orange' => 'orange',
  'mellon' => 'green',
  'lemon' => 'yellow'
];

print_r(array_keys($fruits, 'yellow'));

結果:

Array (
  [0] => banana
  [1] => lemon
)
4. 指定した添字が配列内にあるか(array_key_exists関数)

PHPの配列内に特定の添字があるか調べるときに使います。 array_keys関数とは違い、添字を取得はしません。

<?php
$kantou = ['Tokyo' => 'Shinjuku', 'Kanagawa' => 'Yokohama'];
$kansai = ['Osaka' => 'Osaka', 'Kyoto' => 'Kyoto', 'Hyogo' => 'Kobe'];

if (array_key_exists('Tokyo', $kantou)) {
  echo '東京は関東にあります。';
}

if (array_key_exists('Tokyo', $kansai)) {
  echo '東京は関西にあります。';
}

結果:

東京は関東にあります。
5. 配列の要素数の取得(count関数)

PHPの配列の要素数を数えます。

<?php
$fruits = [
  'banana' => 'yellow',
  'orange' => 'orange',
  'mellon' => 'green',
  'lemon' => 'yellow'
];

echo count($fruits);

結果:

4

変更

PHPの配列内の値をほかの値に変更します。

1. 式で変更

既に配列内にある添字で値を呼び出し、別の値に変更します。

<?php

$prefectures = [
  'Tokyo',
  'Osaka',
  'Kyoto'
];

$prefectures[2] = 'Aichi';
print_r($prefectures);

結果:

Array (
  [0] => Tokyo
  [1] => Kanagawa
  [2] => Aichi
)
2. 配列同士の値の置き換え(array_replace関数)

配列の値をほかの配列の値に置き換えます。 この時、最初の配列にない添字が置き換える配列にある場合は、最初の配列に追加されます。

<?php
$prefectures = [
  'Tokyo',
  'Osaka',
  'Kyoto'
];

$replace = array_replace($prefectures, [1 => 'Kanagawa', 2 => 'Chiba', 3 => 'Saitama']);
print_r($replace);

結果:

Array (
  [0] => Tokyo
  [1] => Kanagawa
  [2] => Chiba
  [3] => Saitama
)

変換

PHPの配列を別の型に変換したり、別の型の変数を配列に変換します。

1. 配列から文字列へ変換(implode関数)

配列を文字列に変換します。

<?php
$array = [
  'Tokyo',
  'Osaka',
  'Kyoto'
];

$string = implode(',', $array);
echo $string;

結果:

Tokyo,Osaka,Kyoto
2. 文字列から配列へ変換(explode関数)

文字列を配列に変換します。

<?php
$string = 'Tokyo, Osaka, Kyoto';
$array = explode(',', $string);
print_r($array);

結果:

Array (
  [0] => Tokyo
  [1] => Osaka
  [2] => Kyoto
)

結合

PHPの配列同士をつなげます。

1. 配列同士の結合(同一の文字列添字の値を上書き)(array_merge関数)

配列を結合します。そのとき添字が重複した場合は、文字列だと後の配列の値に上書きし、番号だと追記します。

<?php
$car1 = ['color' => 'silver', 'price' => 5000000, 0 =>'car navigation'];
$car2 = ['color' => 'black', 'price' => 10000000, 'max_speed' => '200km', 0 =>'sports car'];

$result = array_merge($car1, $car2);
print_r($result);

結果:

Array (
  [color] => black
  [price] => 10000000
  [0] => car navigation
  [max_speed] => 200km
  [1] => sports car
)
2. 配列同士の結合(同一の文字列添字の値をまとめる)(array_merge_recursive関数)

結合するのはarray_merge関数と同じです。 この関数の特徴は、添字が重複した場合は、文字列だとその添字の値同士で配列を作り、番号だと追記します。

<?php
$car1 = ['color' => 'silver', 'price' => 5000000, 0 =>'car navigation'];
$car2 = ['color' => 'black', 'price' => 10000000, 'max_speed' => '200km', 0 =>'sports car'];

$result = array_merge_recursive($car1, $car2);
print_r($result);

結果:

Array (
  [color] => Array (
    [0] => silver
    [1] => black
  )
  [price] => Array (
    [0] => 5000000
    [1] => 10000000
  )
  [0] => car navigation
  [max_speed] => 200km
  [1] => sports car
)

まとめ

今回はPHPでの配列機能をまとめました。 まとめたものだけでも、PHPには配列の操作や関数が多くありました。 ただし、ここでまとめたものはPHPの配列の操作の一部分で、ここで書いたもの以外にも配列の操作や関数はあります。 PHPの配列を活用して、より良いプログラムを作成しましょう。

Copyright © RAKUS Co., Ltd. All rights reserved.