Существуют ли какие-либо функции для рекурсивного взрыва и развязывания многомерных массивов в PHP?
Implode и Explode Многомерные массивы
Ответ 1
Вы можете сделать это, написав рекурсивную функцию:
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 среди других.
Ответ 2
Я обнаружил, что var_export хорош, если вам требуется читаемое строковое представление (взрыва) многомерного массива без автоматической печати значения, такого как var_dump.
Ответ 3
Вы можете использовать array_walk_recursive
, чтобы вызвать определенную функцию для каждого значения в массиве рекурсивно. Как выглядит эта функция, зависит от фактических данных и того, что вы пытаетесь сделать.
Ответ 4
Я сделал две рекурсивные функции для взрыва и взрыва.
Результат 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);