Как n-мерный массив представить в виде строки?
Здесь представлена одна из реализаций. В связи с многомерностью была использована рекурсия. А разделителем элементов массива в рабочей строке была принята вертикальная черта - "|". Отсюда не универсальность данного подхода, так как при наличии такого же символа в разбираемом массиве в ключе, в значении или в обоих составляющих, возникает путаница. Поэтому нужно что-то посерьезнее придумать. Это блюдо из быстрой кухни :)
Скачать данный листинг можно здесь - downoad.
<?php ## Перевод n-мерного массива в строковое представление
// Строка для формирования строкового представления массива
$str = "";
// Строковый разделитель-казатель начала массива
$begin = "[";
// Строковый разделитель-указатель окончания массива
$end = "]";
/* Разделитель элементов массива (ключей, значений, вложенных элементов-массивов) в формировании $str */
$separator = "|";
// Тестовый 2-у мерный массив
$massive = array(
"first" => "element",
"second" => "element",
array(
"first_1" => "element_1",
"second_1" => "element_1",
"third_1" => "element_1",
"therd_1" => "element_1",
),
"third" => "element",
array(
"first_2" => "element_2",
"second_2" => "element_2",
),
"2" => "end",
);
/* Функция для рекурсивного поиска среди элементов массива вложенных массивов. Передаем рабочую строку $str и элемент с вложенным массивом $temp */
function searchIn($str, $temp) {
$str = "";
$begin = "[";
$end = "]";
$separator = "|";
// Формируем строковое представление массива
$str .= $separator;
$str .= $begin;
foreach($temp as $key => $value) {
// Поиск вложенных массивов среди элементов переданного массива
if(is_array($massive[$key])) {
/* При наличии вложенных массивов продолжаем поиск вглубь элемента массива.
Полное погружение обеспечивается за счет рекурсивного вызова исходной функции searchIn($str, $temp) */
$str .= searchIn($str, $massive[$key]);
}
else {
$str .= $separator;
$str .= $key;
$str .= $separator;
$str .= $value;
}
}
$str .= $separator;
$str .= $end;
// Возвращаем сформированное строковое представление массива
return $str;
}
// Формируем строковое представление массива $massive
$str .= $begin;
foreach($massive as $key => $value) {
// Поиск вложенных массивов среди элементов массива $massive
if(is_array($massive[$key])) {
/* При наличии вложенных массивов продолжаем поиск вглубь элемента массива.
Полное погружение обеспечивается за счет рекурсивного вызова исходной функции searchIn($str, $temp) */
$str .= searchIn($str, $massive[$key]);
}
else {
$str .= $separator;
$str .= $key;
$str .= $separator;
$str .= $value;
}
}
$str .= $separator;
$str .= $end;
// Выводим полученное строковое представление $str исходного 2-у мерного массива $massive
echo $str;
?>
В итоге на столе окажется строчечка следующего вида:
[|first|element|second|element|[|first_1|element_1|second_1|element_1|third_1|element_1|fourth_1|element_1|]|third|element|[|first_2|element_2|second_2|element_2|]|2|end|]