代码之家  ›  专栏  ›  技术社区  ›  HyderA

内爆和爆炸多维数组[复制]

  •  23
  • HyderA  · 技术社区  · 15 年前

    4 回复  |  直到 15 年前
        1
  •  47
  •   lonesomeday    13 年前

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

    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
  •  7
  •   Dave    13 年前

    我发现,如果需要多维数组的可读字符串表示(爆炸),而不自动打印var_dump之类的值,那么var_导出是很好的。

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

        3
  •  2
  •   Gumbo    15 年前
        4
  •  2
  •   Falk    13 年前

    我做了两个递归函数来内爆。 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);
    
    推荐文章