是否有任何函数可以在PHP中递归爆炸和插入多维数组?
答案 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;
}
至于爆炸,除非你给字符串提供某种形式的结构,否则这是不可能的,在这种情况下,你进入序列化的领域,已经存在的函数:serialize,json_encode ,http_build_query等。
答案 1 :(得分:7)
我发现如果你需要一个多维数组的可读字符串表示(爆炸)而不自动打印像var_dump这样的值,var_export是好的。
答案 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);