現在、多次元配列をコンマ区切りの値に変換する方法をコーディングしています (デバッグを容易にするために、コンマの代わりにパイプを使用しています)。問題は、これを行うために使用するコードがひどいものであることを知っていることです。それは私が望むように機能しますが、まったく良くありません。
必要なもの
現在、このarr_to_csv()
関数は、多次元配列内の 5 レベルのネストされたデータに対して機能します。1つまたは無制限のネストされた配列に対して同じことを実行する再帰関数、または正しい方向への適切な微調整が必要です。再帰は私の長所ではありませんが、それが前進する方法であることは知っています。
データ入力
多次元配列が関数に渡されます。
array
'name' =>
array
'singular' => null
'plural' => null
'fields' =>
array
'price' =>
array
'label' => string 'Preis' (length=5)
'company_id' =>
array
'label' => null
'placeholder' => null
//...the array could go on...
関数は次を返します...
これはまさに私が欲しいものです...
0 => string 'name||singular||null' (length=20)
1 => string 'name||plural||null' (length=18)
2 => string 'fields||price||label||Preis' (length=27)
3 => string 'fields||company_id||label||null' (length=31)
4 => string 'fields||company_id||placeholder||null' (length=37)
5 => string 'fields||name||label||null' (length=25)
6 => string 'fields||name||placeholder||null' (length=31)
私の恐ろしい構築関数
私は再帰が苦手なので、これが私のひどいforeach
s のリストです。以下のコードからわかるように、これはひどいものです (全体を読む必要はなく、自分自身をコピーするだけです)。私の恐ろしいコードを整理するのを手伝ってください!
function arr_to_csv($data,$csv = '||') {
$array = array();
/* Epic amount of for each's. This could be done with recursion */
foreach($data as $key => &$value) {
if (!is_array($value)) {
$array[] = $key . $csv .(is_null($value)?'null':$value);
} else {
foreach ($value as $k => &$v) {
if (!is_array($v)) {
$array[] = $key . $csv . $k . $csv . (is_null($v) ? 'null' : $v);
} else {
foreach ($v as $kk => &$vv) {
if (!is_array($vv)) {
$array[] = $key . $csv . $k . $csv . $kk . $csv . (is_null($vv) ? 'null' : $vv);
} else {
foreach ($vv as $x => &$y) {
if (!is_array($y)) {
$array[] = $key . $csv . $k . $csv . $kk . $csv. $x . $csv . (is_null($y) ? 'null' : $y);
} else {
foreach ($y as $too => $long) {
if(!is_array($long)) {
$array[] = $key . $csv . $k . $csv . $kk . $csv. $x . $csv . $too . $csv. (is_null($long)?'null':$long);
} else {
foreach ($long as $omg => $why) {
if(!is_array($why)) {
$array[] = $key . $csv . $k . $csv . $kk . $csv. $x . $csv . $too . $csv . $omg . $csv . (is_null($why) ? 'null' : $why);
}
}
}
}
}
}
}
}
}
}
}
}
return $array;
}