Подтвердить что ты не робот

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

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

4b9b3361

Ответ 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.

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

Ответ 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);