PHPで多次元配列を再帰的に展開および展開するための関数はありますか?
これを行うには、再帰関数を記述します。
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 など。
Var_dumpのように値を自動的に出力せずに、多次元配列の読み取り可能な文字列表現(分解)が必要な場合は、var_exportが適していることがわかりました。
私は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);
array_walk_recursive
配列内のすべての値に対して特定の関数を再帰的に呼び出します。その関数がどのように見えるかは、実際のデータと何をしようとしているのかによって異なります。