現在、データベースから受け取ったデータ(配列形式)を編集しようと四苦八苦しています。特に配列同士の結合は関数によって微妙に動作が違い、理解に苦労しました。
今回、その過程で調べた関数をまとめてみました。
使用する配列
こちらのサイトから拝借。(少し編集しました。)
test.php
$city_1 = array('Tokyo', 'Nagoya', 'Kyoto');
$city_2 = array('Osaka', 'Nagano', 'Yokohama');
$col_1 = array(
'id' => 1,
'name' => 'Bill',
'age' => 33,
'country' => 'America',
);
$col_2 = array(
'id' => 2,
'name' => 'Chris',
'age' => 54,
'country' => 'Canada',
);
test.php
print_r($city_1);
/* 結果
Array
(
[0] => Tokyo
[1] => Nagoya
[2] => Kyoto
)
*/
print_r($city_2);
/* 結果
Array
(
[0] => Osaka
[1] => Nagano
[2] => Yokohama
)
*/
print_r($col_1);
/* 結果
Array
(
[id] => 1
[name] => Bill
[age] => 33
[country] => America
)
*/
print_r($col_2);
/* 結果
Array
(
[id] => 2
[name] => Chris
[age] => 54
[country] => Canada
)
*/
結合する
様々な方法がありますが、添字配列と連想配列で動作が異なったりするので要注意です。
array_merge
添字配列
そのまま後ろに結合されます。
test.php
print_r(array_merge($city_1, $city_2));
/* 結果
Array
(
[0] => Tokyo
[1] => Nagoya
[2] => Kyoto
[3] => Osaka
[4] => Nagano
[5] => Yokohama
)
*/
連想配列
キーが同じ配列を結合しようとすると、後ろの配列に上書きされてしまいます。異なるキーであれば上書きはされません。
test.php
print_r(array_merge($col_1, $col_2));
/* 結果
Array
(
[id] => 2
[name] => Chris
[age] => 54
[country] => Canada
)
*/
array_push
添字配列
追加する内容に配列を指定すると、その配列自体が1つの要素として加わります。
test.php
array_push($city_1, $city_2);
print_r($city_1);
/* 結果
Array
(
[0] => Tokyo
[1] => Nagoya
[2] => Kyoto
[3] => Array
(
[0] => Osaka
[1] => Nagano
[2] => Yokohama
)
)
*/
配列ではなく要素を指定すれば、そのまま追加されます。
test.php
array_push($city_1, 'Naha');
print_r($city_1);
/* 結果
Array
(
[0] => Tokyo
[1] => Nagoya
[2] => Kyoto
[3] => Naha
)
*/
連想配列
添字配列と同じ動作をします。追加した配列自体が1つの要素として加わっています。
test.php
array_push($col_1, $col_2);
print_r($col_1);
/* 結果
Array
(
[id] => 1
[name] => Bill
[age] => 33
[country] => America
[0] => Array
(
[id] => 2
[name] => Chris
[age] => 54
[country] => Canada
)
)
*/
先に空の配列を用意してそれに追加する形で指定すれば、多重配列になりますが、まとまった結果が得られます。
test.php
$col_0 = array();
array_push($col_0, $col_1);
array_push($col_0, $col_2);
print_r($col_0);
/* 結果
Array
(
[0] => Array
(
[id] => 1
[name] => Bill
[age] => 33
[country] => America
)
[1] => Array
(
[id] => 2
[name] => Chris
[age] => 54
[country] => Canada
)
)
*/
演算子を利用
すでに同じ添字が存在する場合、上書きはされず、追加もされません。
添字配列
test.php
print_r($city_1 + $city_2);
/* 結果
Array
(
[0] => Tokyo
[1] => Nagoya
[2] => Kyoto
)
*/
連想配列
こちらも添字配列と同じです。すでに同じキーが存在するため、上書きも追加もされません。
test.php
print_r($col_1 + $col_2);
/* 結果
Array
(
[id] => 1
[name] => Bill
[age] => 33
[country] => America
)
*/
array_merge_recursive
添字配列
array_mergeと同じ結果になりました。
test.php
print_r(array_merge_recursive($city_1, $city_2));
/* 結果
Array
(
[0] => Tokyo
[1] => Nagoya
[2] => Kyoto
[3] => Osaka
[4] => Nagano
[5] => Yokohama
)
*/
連想配列
この関数が役に立つのは連想配列の場合です。キーごとに各要素がまとめられます。
test.php
print_r(array_merge_recursive($col_1, $col_2));
/* 結果
Array
(
[id] => Array
(
[0] => 1
[1] => 2
)
[name] => Array
(
[0] => Bill
[1] => Chris
)
[age] => Array
(
[0] => 33
[1] => 54
)
[country] => Array
(
[0] => America
[1] => Canada
)
)
*/
長くなりそうなので、次回に続きます。