Implode и Explode Многомерные массивы

Существуют ли какие-либо функции для рекурсивного взрыва и разложения многомерных массивов в PHP?

Solutions Collecting From Web of "Implode и Explode Многомерные массивы"

Вы можете сделать это, написав рекурсивную функцию:

 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.

http://www.php.net/manual/en/function.var-export.php

Вы можете использовать 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);