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)); // アルファベットの都道府県だけの配列を取り出せる