内爆和爆炸多维数组

时间:2010-10-10 10:41:42

标签: php arrays multidimensional-array

是否有任何函数可以在PHP中递归爆炸和插入多维数组?

4 个答案:

答案 0 :(得分:44)

您可以通过编写递归函数来完成此操作:

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

至于爆炸,除非你给字符串提供某种形式的结构,否则这是不可能的,在这种情况下,你进入序列化的领域,已经存在的函数:serializejson_encodehttp_build_query等。

答案 1 :(得分:7)

我发现如果你需要一个多维数组的可读字符串表示(爆炸)而不自动打印像var_dump这样的值,var_export是好的。

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

答案 2 :(得分:2)

您可以使用array_walk_recursive递归地调用数组中每个值的给定函数。该函数的外观取决于实际数据以及您要执行的操作。

答案 3 :(得分:2)

我做了两个递归函数来内爆和爆炸。 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);