作成日:2019-02-27, 更新日:2019-02-27
基本
function ary_flatten($ary=array()) {
if ( !is_array($ary) ) {
return false;
}
$list = array();
foreach ( $ary as $rowAry ) {
if ( is_array($rowAry) ) {
$list = array_merge($list, ary_flatten($rowAry));
}
else {
$list[] = $rowAry;
}
}
return $list;
}
任意の要素名に子、孫がいるヤツを一次元配列にしたい
▼やりたいコト:親子関係を表した多次元配列を親子関係無しの一次元配列にしたい。
$ary = array(
array(
'id' => '鳥グループ',
'depth' => '1',
'child' => array(
array(
'id' => '鳥精',
'depth' => '2',
'child' => array(
array(
'id' => '鳥精:塩',
'depth' => '3',
),
array(
'id' => '鳥精:タレ',
'depth' => '3',
),
),
),
array(
'id' => 'ナンコツ',
'depth' => '2',
'child' => array(
array(
'id' => 'ナンコツ:塩',
'depth' => '3',
),
array(
'id' => 'ナンコツ:タレ',
'depth' => '3',
),
),
),
),
),
array(
'id' => '豚グループ',
'depth' => '1',
),
array(
'id' => 'シマウマ',
'depth' => '1',
'child' => array(
array(
'id' => '丸ごとシマウマ',
'depth' => '2',
),
),
),
);
↓↓↓こんな感じにしたい
array(
array(
'id' => '鳥グループ',
'depth' => '1',
),
array(
'id' => '鳥精',
'depth' => '2',
),
array(
'id' => '鳥精:塩',
'depth' => '3',
),
array(
'id' => '鳥精:タレ',
'depth' => '3',
),
array(
'id' => 'ナンコツ',
'depth' => '2',
),
array(
'id' => 'ナンコツ:塩',
'depth' => '3',
),
array(
'id' => 'ナンコツ:タレ',
'depth' => '3',
),
array(
'id' => '豚グループ',
'depth' => '1',
),
array(
'id' => 'シマウマ',
'depth' => '1',
),
array(
'id' => '丸ごとシマウマ',
'depth' => '2',
),
)
▼「child」がいるときは再帰処理
function ary_flatten($ary=array()) {
if ( !is_array($ary) ) {
return false;
}
$list = array();
foreach ( $ary as $rowAry ) {
if ( isset( $rowAry['child'] ) ) {
$tmp = $rowAry;
unset($tmp['child']);
$list[] = $tmp;
$list = array_merge($list, ary_flatten($rowAry['child']));
}
else {
$list[] = $rowAry;
}
}
return $list;
}