13

多次元配列を特定の形式の文字列に変換しようとしています。

function convert_multi_array($array) {
    foreach($array as $value) {
        if(count($value) > 1) {
            $array = implode("~", $value);
        }
        $array = implode("&", $value);
    }
    print_r($array);
}
$arr = array(array("blue", "red", "green"), array("one", "three", "twenty"));
convert_multi_array($arr);

出力する必要があります: blue~red~green&one~three~twenty... その他のサブ配列についても同様です。

私が望む結果に少しでも近いコードを生成することができなかったと言っておきましょう。2時間後、これは私が得ることができる最高のものです. 内破が通常の弦の場合とは異なる動作をしている理由がわかりません。または、単にこれを正しく見ていないだけかもしれません。配列の値に implode を使用できますか?

4

9 に答える 9

20

$array元の配列を含むを上書きしています。しかし、foreachのコピーで$arrayは作業中なので、基本的には新しい変数を割り当てるだけです。

あなたがすべきことは、子配列を繰り返し処理し、それらを文字列に「変換」してから、結果を内破することです。

function convert_multi_array($array) {
  $out = implode("&",array_map(function($a) {return implode("~",$a);},$array));
  print_r($out);
}
于 2012-09-06T22:05:48.577 に答える
1

興味がないかもしれませんが、エラーを含むネストされた配列を報告する必要があったため、単純に変数を定義し、json_encode を使用してこれをメールに入れました。配列を文字列に変換する 1 つの方法。

于 2017-03-08T12:39:41.493 に答える
0

また、PHP 結合マニュアル ( http://php.net/manual/en/function.join.php )から元の実装を取得することもできます。

function joinr($join, $value, $lvl=0)
{
    if (!is_array($join)) return joinr(array($join), $value, $lvl);
    $res = array();
    if (is_array($value)&&sizeof($value)&&is_array(current($value))) { // Is value are array of sub-arrays?
        foreach($value as $val)
            $res[] = joinr($join, $val, $lvl+1);
    }
    elseif(is_array($value)) {
        $res = $value;
    }
    else $res[] = $value;
    return join(isset($join[$lvl])?$join[$lvl]:"", $res);
}

$arr = array(array("blue", "red", "green"), array("one", "three", "twenty"));
joinr(array("&", "~"), $arr);

これは再帰的であるため、次のこともできます

$arr = array(array("a", "b"), array(array("c", "d"), array("e", "f")), "g");
joinr(array("/", "-", "+"), $arr);

そしてあなたは得るでしょう

a-b/c+d-e+f/g
于 2012-09-06T22:17:03.890 に答える