多维数组转换为字符串

3
我有一个动态多维数组,我想将它转换为字符串。 以下是一个示例:
Array
(
[data] => check
[test1] => Array
    (
        [data] => Hello
    )

[test2] => Array
    (
        [data] => world
    )

[test3] => Array
    (
        [data] => bar
        [tst] => Array
            (
                [data] => Lorem
                [bar] => Array
                    (
                        [data] => doller
                        [foo] => Array
                            (
                                [data] => sit
                            )

                    )

            )

    )

[test4] => Array
    (
        [data] => HELLO
        [tst] => Array
            (
                [data] => ipsum
                [bar] => Array
                    (
                        [data] => Lorem
                    )

            )

    )

)

字符串的示例:

 check&hello&world&bar...lorem&doller...sit ....

我尝试了很多方法,甚至查看了其他SO问题中给出的解决方案。例如:将多维数组转换为单一数组多维数组转换为字符串。但是没有成功。


你想把整个数组转换成单个字符串吗?你能给它加个例子吗? - Satish Sojitra
你尝试过 $var = print_r($myArray, true); 吗? - HTMHell
@HtmHell,他上面给出的代码看起来像是print_r的输出结果。如何使用print_r($myArray)将整个数组转换为字符串? - Satish Sojitra
@SatishSojitra 我已经添加了一个字符串的示例。 - mega6382
@mega6382 谢谢。我已经发布了这个问题的答案。你可以添加&并格式化你的输出。 - Satish Sojitra
显示剩余2条评论
5个回答

7
您可以简单地使用array_walk_recursive,如下所示
$result = [];
array_walk_recursive($arr, function($v) use (&$result) {
    $result[] = $v;
});
echo implode('&', $result);

Demo


1
首先将其转换为扁平数组,方法是:
$it = new RecursiveIteratorIterator(new RecursiveArrayIterator($input_array));
$flat = iterator_to_array($it, false);

false 可以防止数组键名冲突。

然后使用 implode 函数,

$str = implode('&', $flat);

1
您可以使用以下递归函数将任何多维数组转换为字符串。
 public function _convertToString($data,&$converted){
    foreach($data as $key => $value){
        if(is_array($value)){
                $this->_convertToString($value,$converted);

        }else{
            $converted .= '&'. $value;
        }
    }
}

您可以以下列方式调用上述函数:

   $str = array(
      "data" => "check",
        "test1" => array(
          "data" => "Hello",
            "test3" => array(
                "data" => "satish"
            )
        ),
        "test2" => array(
            "data" => "world"
        )
    );

    $converted = "";

    //call your function and pass your array and reference string
    $this->_convertToString($str,$converted);

    echo $converted;

输出将如下所示:
check&Hello&satish&world

您可以修改代码以满足您的要求。

如果需要进一步帮助,请告诉我。


0

PHP有一些内置函数可以实现这个功能,例如var_dump、json_encode和var_export。但是如果您想更好地控制输出,可以使用递归函数来完成。

function arrToStr(array $data)
{
    $str = "";
    foreach ($data as $val) {
        if (is_array($val)) {
            $str .= arrToStr($val);
        } else {
            $str .= $val;
        }
    }

    return $str;
}

使用此功能,您可以自由格式化额外的换行和空格。


0
我会使用递归来处理这种类型的数组:
echo visit($your_array);

function visit($val){
    if( !is_array($val) ){
        return $val;
    }
    $out="";
    foreach($val as $v){
       $out.= "&".visit($v);
    }
    return $out;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接