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)

Моя ужасная сконструированная функция

я не хорошо с рекурсией, так что здесьмой ужасный списокforeachs. Как вы можете видеть из приведенного ниже кода, это ужасно (не нужно читать все целиком, оно просто копирует себя). Пожалуйста, помогите мне разобраться с моим ужасным кодом!

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;
}

Ответы на вопрос(3)

Ваш ответ на вопрос