PHP - многомерный массив в CSV
В настоящее время я закодировал способ превратить многомерный массив в значения, разделенные запятыми (ям с использованием труб вместо запятых для простоты отладки). Проблема в том, что я знаю, что код, который я использую для этого, чертовски ужасен. Это работает, как я хочу, но этоне очень приятно.
Что мне нужно
В настоящее времяarr_to_csv()
Функция работает для пяти уровней вложенных данных в многомерном массиве. Мне нужна рекурсивная функция, чтобы выполнить то же самое для одного или неограниченного числа вложенных массивов, или для хорошего толчка в правильном направлении. Рекурсияне моя сильная сторона, но я знаю этоэто путь вперед.
Ввод данных
В функцию передается многомерный массив.
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;
}