配列が深すぎて、階層を浅くしたいな〜というときに使えます。
array_merge
を使うと長くなりますが、call_user_func_array
を使用すれば一行で済みます。
私は職場で知りましたが、公式サイトのUser Contributed Notes
に載っています!
テスト用配列
配列$members
は、maleとfemaleにグループ分けされています。
この配列からグループ分けを取り払い、配列の階層を1つ減らします。
<?php
$members = array (
'male' => array (
0 => array(
'id' => 1,
'name' => 'Bob'
),
1 => array(
'id' => 2,
'name' => 'John'
),
2 => array(
'id' => 3,
'name' => 'Ben'
)
),
'female' => array (
0 => array(
'id' => 4,
'name' => 'Kate'
),
1 => array(
'id' => 5,
'name' => 'Jane'
)
)
);
var_dump($members);
/*
出力結果
array(2) {
["male"]=>
array(3) {
[0]=>
array(2) {
["id"]=>
int(1)
["name"]=>
string(3) "Bob"
}
[1]=>
array(2) {
["id"]=>
int(2)
["name"]=>
string(4) "John"
}
[2]=>
array(2) {
["id"]=>
int(3)
["name"]=>
string(3) "Ben"
}
}
["female"]=>
array(2) {
[0]=>
array(2) {
["id"]=>
int(4)
["name"]=>
string(4) "Kate"
}
[1]=>
array(2) {
["id"]=>
int(5)
["name"]=>
string(4) "Jane"
}
}
}
*/
配列の階層を減らす
call_user_func_array("array_merge", 配列)
だけで完結します。
$merge_members = call_user_func_array("array_merge", $members);
var_dump($merge_members);
/*
出力結果
array(5) {
[0]=>
array(2) {
["id"]=>
int(1)
["name"]=>
string(3) "Bob"
}
[1]=>
array(2) {
["id"]=>
int(2)
["name"]=>
string(4) "John"
}
[2]=>
array(2) {
["id"]=>
int(3)
["name"]=>
string(3) "Ben"
}
[3]=>
array(2) {
["id"]=>
int(4)
["name"]=>
string(4) "Kate"
}
[4]=>
array(2) {
["id"]=>
int(5)
["name"]=>
string(4) "Jane"
}
}
*/