配列操作(生成, 追加, 結合, 配列関数)

PHPで配列操作するうえで知っておくべき知識についてまとめてます。配列の生成方法、要素の追加方法、利用頻度の高い配列操作関数について取り上げます。

一次元配列

生成方法1

$array1 = [1,2,3];
var_dump($array1);
array (size=3)
0 => int 1
1 => int 2
2 => int 3

生成方法2

$array2 = [];
$array2[] = 1;
$array2[] = 2;
$array2[] = 3;
var_dump($array2);
array (size=3)
0 => int 1
1 => int 2
2 => int 3

注意

下記のように指定した場合、添え字が数値の連想配列が生成されます。

$array3[] = [1,2,3];
var_dump($array3);
array (size=1)
0 =>
  array (size=3)
 0 => int 1
 1 => int 2
 2 => int 3

連想配列

生成

$array4 = [
    'data1' => 1,
    'data2' => 2,
    'data3' => 3
];
var_dump($array4);
array (size=3)
‘data1’ => int 1
‘data2’ => int 2
‘data3’ => int 3

配列の追加

// array[0]に追加されます。(2次元になる)
$array4[] = ['data4' => 4];
var_dump($array4);
array (size=4)
‘data1’ => int 1
‘data2’ => int 2
‘data3’ => int 3
0 =>
  array (size=1)
  ‘data4’ => int 4

キーの追加

// 同じ次元にKey-Valueが追加されます。
$array4 += ['data4' => 4];
var_dump($array4);
array (size=5)
‘data1’ => int 1
‘data2’ => int 2
‘data3′ => int 3
0 =>
  array (size=1)
 ’data4’ => int 4
‘data4’ => int 4

2次元配列

生成

$array5 = [
    'name1' => ['data1' => 1, 'data2' => 2, 'data3' => 3],
    'name2' => ['data4' => 4, 'data5' => 5, 'data6' => 6]
];
var_dump($array5);
array (size=2)
‘name1’ =>
  array (size=3)
  ‘data1’ => int 1
  ‘data2’ => int 2
  ‘data3’ => int 3
‘name2’ =>
  array (size=3)
  ‘data4’ => int 4
  ‘data5’ => int 5
  ‘data6’ => int 6

要素の追加

添え字[name2]に要素を追加します。

$array5['name2'] += ['data7' => 7];
var_dump($array5);
array (size=2)
‘name1’ =>
  array (size=3)
  ‘data1’ => int 1
  ‘data2’ => int 2
  ‘data3’ => int 3
‘name2’ =>
  array (size=4)
  ‘data4’ => int 4
  ‘data5’ => int 5
  ‘data6’ => int 6
  ‘data7’ => int 7

foreachによる配列参照

$array = ['data1' => 1, 'data2' => 2, 'data3' => 3];
 
foreach ($array as $value) {
    echo  "value:" . $value . "</br>";
}
 
foreach ($array as $key => $value) {
    echo  "key:" . $key . " value:" . $value . "</br>";
}
value:1
value:2
value:3
key:data1 value:1
key:data2 value:2
key:data3 value:3

配列操作で利用する関数

count
( 配列の長さ )

$array = array(1,2,3,4,5);
echo count($array);    // 5

compact
( 変数から連想配列生成 )

変数名をそのままキーにして連想配列を作れます。

$name = "山田";
$old = 33;
$sex = "女";
 
// 「変数名」と「変数に格納された値」から連想配列生成
$array = compact("name", "old", "sex");
var_dump($array);
// array(3) { ["name"]=> string(6) "山田" ["old"]=> int(33) ["sex"]=> string(3) "女" } 

extract
( 連想配列から変数展開 )

連想配列のキーを変数名にして、変数を展開できます。compactしたものを展開するのに利用できます。
PhpStormなど利用している場合、変数が定義されてないというエラーが表示されます。以下のようにコメントを記述すればエラーが消えます。

/**
 * @var string $name
 * @var int $old
 * @var string $sex
 */
extract($array);

list
( 複数変数へ一括代入 )

$array = [1, 3, 4];
list($a, $b, $c) = $array;
echo $a;    // 1
echo $b;    // 3
echo $c;    // 4

数値添字の配列でのみ利用可能です。連想配列では利用できません。

in_array
( 値の存在確認 )

配列に指定した値があるか検索します。

$name = ['山田', '鈴木', '佐藤'];
 
in_array('山田', $name); // true
in_array('田中', $name); // false

array_key_exists
( キーの存在確認 )

配列に指定したキーまたは添字があるか検索します。

$person = ['name' =>'山田', 'old' => 22];
 
array_key_exists('name', $person); // true

array_search
( 指定した値のキーを返す )

配列に指定した値が含まれているか調べ、存在している場合はキーを返します。

$array = ['国語' => '90', '数学' => '74', '英語' => '80'];
 
echo array_search('90', $array); // 国語
echo array_search('60', $array); // false

array_merge
( 配列結合 )

配列を結合します。キー重複の場合、後に指定された配列の値で上書きします。

デフォルトの設定を変更するときなどに利用します。

$array = ['width' => 70, 'height' => 120];
samplefunc($array);
 
function samplefunc($new_set = '') {
    $def_set = ['width' => 50, 'height' => 100, 'color' => 'red'];
    $setting = array_merge($def_set, $new_set);
     
    var_dump($setting);
}
array (size=3)
 ’width’ => int 70
 ’height’ => int 120
 ’color’ => string ‘red’ (length=3)

数値インデックスの結合に注意

文字のインデックスの場合、インデックスが保持されますが、数値インデックスの場合、0から始まる連番が振り直されます。数値インデックスを維持して結合したい場合、配列結合演算子+を利用します。

array_map
( 要素ごとにコールバック関数実行 )

指定した配列の要素にコールバック関数を適用します。

$array = [
    "35,15,74,35",
    "47,23,85,35",
    "86,46,84,64",
];
 
$rslt = array_map('samplefunc', $array);
var_dump($rslt);
 
function samplefunc($str) {
    return explode(',', $str);
}
array (size=3)
0 =>
  array (size=4)
  0 => string ’35’ (length=2)
  1 => string ’15’ (length=2)
  2 => string ’74’ (length=2)
  3 => string ’35’ (length=2)
1 =>
  array (size=4)
  0 => string ’47’ (length=2)
  1 => string ’23’ (length=2)
  2 => string ’85’ (length=2)
  3 => string ’35’ (length=2)
2 =>
  array (size=4)
  0 => string ’86’ (length=2)
  1 => string ’46’ (length=2)
  2 => string ’84’ (length=2)
  3 => string ’64’ (length=2)

array_column
( 指定要素を抽出 )

指定した要素だけ取り出します。

$prefectures = [
    ["北海道", "hokkaido"],
    ["青森県", "aomori"],
    ["岩手県", "iwate"],
    ["秋田県", "akita"],
    ["宮城県", "miyagi"],
    ["山形県", "yamagata"],
    ["福島県", "fukushima"],
    ["茨城県", "ibaraki"],
    ["栃木県", "tochigi"],
    ["群馬県", "gunma"],
    ["埼玉県", "saitama"],
    ["千葉県", "chiba"],
    ["東京都", "tokyo"],
    ["神奈川県", "kanagawa"],
    ["新潟県", "niigata"],
    ["長野県", "nagano"],
    ["山梨県", "yamanashi"],
    ["富山県", "toyama"],
    ["石川県", "ishikawa"],
    ["福井県", "fukui"],
    ["岐阜県", "gifu"],
    ["静岡県", "shizuoka"],
    ["三重県", "mie"],
    ["愛知県", "aichi"],
    ["大阪府", "osaka"],
    ["京都府", "kyoto"],
    ["滋賀県", "shiga"],
    ["兵庫県", "hyogo"],
    ["奈良県", "nara"],
    ["和歌山県", "wakayama"],
    ["鳥取県", "tottori"],
    ["島根県", "shimane"],
    ["岡山県", "okayama"],
    ["広島県", "hiroshima"],
    ["山口県", "yamaguchi"],
    ["愛媛県", "ehime"],
    ["徳島県", "tokushima"],
    ["高知県", "kochi"],
    ["香川県", "kagawa"],
    ["福岡県", "fukuoka"],
    ["佐賀県", "saga"],
    ["長崎県", "nagasaki"],
    ["大分県", "oita"],
    ["熊本県", "kumamoto"],
    ["宮崎県", "miyazaki"],
    ["鹿児島県", "kagoshima"],
    ["沖縄県", "okinawa"]
];
 
var_dump(array_column($prefectures, 0));  // 漢字の都道府県だけの配列を取り出せる
var_dump(array_column($prefectures, 1));  // アルファベットの都道府県だけの配列を取り出せる