LoginSignup
41
42

More than 3 years have passed since last update.

【PHP】配列おさらい〜結合編

Last updated at Posted at 2018-09-02

現在、データベースから受け取ったデータ(配列形式)を編集しようと四苦八苦しています。特に配列同士の結合は関数によって微妙に動作が違い、理解に苦労しました。

今回、その過程で調べた関数をまとめてみました。

使用する配列

こちらのサイトから拝借。(少し編集しました。)

FuelPHP1.7 Documentation ~ Arr クラス

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
        )

)
*/

長くなりそうなので、次回に続きます。

41
42
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
41
42