多维数组转字符串

新手上路,请多包涵

我正在尝试将多维数组转换为具有特定格式的字符串。

 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 …等等更多的子阵列。

我只想说,我无法生成任何与我想要的结果相差甚远的代码。两个小时后,这几乎是我能得到的最好的。我不知道为什么内爆的行为与它们通常对弦的行为不同,或者也许我只是没有正确看待这一点。您可以对数组值使用 implode 吗?

原文由 user1631995 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 372
2 个回答

您正在覆盖 $array ,其中包含原始数组。但是在 foreach 的副本 $array 正在处理中,所以你基本上只是分配一个新变量。

您应该做的是遍历子数组并将它们“转换”为字符串,然后分解结果。

 function convert_multi_array($array) {
  $out = implode("&",array_map(function($a) {return implode("~",$a);},$array));
  print_r($out);
}

原文由 Niet the Dark Absol 发布,翻译遵循 CC BY-SA 3.0 许可协议

看我的版本。它内爆任何维度:

 function implode_all($glue, $arr){
    for ($i=0; $i<count($arr); $i++) {
        if (@is_array($arr[$i]))
            $arr[$i] = implode_all ($glue, $arr[$i]);
    }
    return implode($glue, $arr);
}

这是示例:

 echo implode_all(',',
array(
1,
2,
array('31','32'),
array('4'),
array(
  array(511,512),
  array(521,522,523,524),
  53))
);

将打印:

 1,2,31,32,4,511,512,521,522,523,524,53

原文由 Jeff_Alieffson 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏