Существуют ли какие-либо функции для рекурсивного взрыва и разложения многомерных массивов в PHP?
Вы можете сделать это, написав рекурсивную функцию:
function multi_implode($array, $glue) { $ret = ''; foreach ($array as $item) { if (is_array($item)) { $ret .= multi_implode($item, $glue) . $glue; } else { $ret .= $item . $glue; } } $ret = substr($ret, 0, 0-strlen($glue)); return $ret; }
Что касается взрыва, это невозможно, если вы не передадите какую-то формальную структуру в строку, и в этом случае вы попадете в область сериализации, для которой уже существуют функции: serialize , json_encode , http_build_query и другие.
Я обнаружил, что var_export хорош, если вам требуется читаемое строковое представление (взрыва) многомерного массива без автоматической печати значения типа var_dump.
Вы можете использовать array_walk_recursive
для вызова данной функции для каждого значения в массиве рекурсивно. Как выглядит эта функция, зависит от фактических данных и того, что вы пытаетесь сделать.
Я сделал две рекурсивные функции для взрыва и взрыва. Результат multi_explode
может не работать multi_explode
(все значения хранятся на одном уровне измерения).
function multi_implode(array $glues, array $array){ $out = ""; $g = array_shift($glues); $c = count($array); $i = 0; foreach ($array as $val){ if (is_array($val)){ $out .= multi_implode($glues,$val); } else { $out .= (string)$val; } $i++; if ($i<$c){ $out .= $g; } } return $out; } function multi_explode(array $delimiter,$string){ $d = array_shift($delimiter); if ($d!=NULL){ $tmp = explode($d,$string); foreach ($tmp as $key => $o){ $out[$key] = multi_explode($delimiter,$o); } } else { return $string; } return $out; }
Чтобы использовать их:
echo $s = multi_implode( array(';',',','-'), array( 'a', array(10), array(10,20), array( 10, array('s','t'), array('z','g') ) ) ); $a= multi_explode(array(';',',','-'),$s); var_export($a);