Взрывать и взрывать многомерные массивы [дублировать]


На этот вопрос уже есть ответ здесь:

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

Author: HyderA, 2010-10-10

4 answers

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

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;
}

Что касается взрыва, это невозможно, если вы не придадите строке какую-то формальную структуру, и в этом случае вы попадете в область сериализации, для которой уже существуют функции: сериализовать, код json_encode, http_build_query и другие.

 43
Author: lonesomeday, 2013-06-20 15:16:52

Я обнаружил, что var_export хорош, если вам нужно читаемое строковое представление (развернутое) многомерного массива без автоматической печати значения, такого как var_dump.

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

 6
Author: Dave, 2013-03-03 23:12:08

Вы можете использовать array_walk_recursive для рекурсивного вызова заданной функции для каждого значения в массиве. Как выглядит эта функция, зависит от фактических данных и того, что вы пытаетесь сделать.

 2
Author: Gumbo, 2010-10-10 10:43:21

Я сделал две рекурсивные функции для взрыва и взрыва. Результат 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);
 2
Author: Falk, 2012-12-06 19:52:20