如何将多维数组内爆()到字符串中?

时间:2015-09-30 00:29:02

标签: php arrays

我有一个数组,里面有多个数组。这是它的样子:

Array (
    [0] => Array (
        [0] => s1
        [1] => s2
        [2] => s5
        [3] => s1
        [4] => s25
        [5] => s1
        [6] => s6
        [7] => s6
        [8] => s1
    )
    [2] => Array (
        [0] => a2
        [1] => a1
        [2] => a4
    )
    [3] =>  Array ( )
    [4] =>  Array ( )
)

我想弄清楚的是我如何将这些多个数组转换成1个字符串,其中所有数组的值都用逗号分隔$values = "s1,s2,s5.."

之前我使用过impode()但是使用这种类型的数组时,它无法运行。另一个问题是空数组,我相信可以使用array_filter()删除。

$destination_array = array_filter($tags_list);
$destination_array = implode(",", $tags_list);
print_r($destination_array);

3 个答案:

答案 0 :(得分:2)

这里有一个二维数组。 implode()array_filter()都不适用于多维数组。

这意味着您可以过滤掉第一个维度中的所有空值,并尝试破坏第一个维度:

Array (
        [0] => Array (
            [0] => s1
            [1] => s2
            [2] => s5
            [3] => s1
            [4] => s25
            [5] => s1
            [6] => s6
            [7] => s6
            [8] => s1
        )
        [2] => Array (
            [0] => a2
            [1] => a1
            [2] => a4
        )
        [3] =>  Array ( )
        [4] =>  Array ( )
         ↑ Filter first dimension and implode it
    )

显然你需要做的是,你必须过滤每个subArray 。然后内爆每个subArray并再次将所有字符串压缩在一起。

我们怎么做?只需使用array_map()

使用array_map(),您将浏览每个subArray并首先使用array_filter()过滤掉所有空值。然后你implode()每个subArray到一个字符串。在此之后,你将得到一个像这样的数组:

Array
(
    [0] => s1,s2,s5,s1,s25,s1,s6,s6,s1
    [2] => a2,a1,a4
)

然后你必须再次破坏它以获得1个字符串。

代码:

echo implode(",", array_filter(array_map(function($v){
         return implode(",", array_filter($v));
     }, $array)));

输出:

s1,s2,s5,s1,s25,s1,s6,s6,s1,a2,a1,a4

答案 1 :(得分:0)

期望的结果可以通过多种方式实现(超越Rizier的功能方法,这是好的和干净的):

Demo

方法#1:无聊/循环/快速方式

$array=[['s1', 's2', 's5', 's1', 's25', 's1', 's6', 's6',' s1'], 2=>['a2', 'a1', 'a4'], [], []];
$result = [];
foreach ($array as $subarray) {
    if (!empty($subarray)) {
        $result[] = implode(',', $subarray);
    }
}
echo implode(',', $result);

方法#2:方便的“leafnode”抓取器

array_walk_recursive($array, function($v){
    static $first;
    echo $first.$v;
    $first=',';
});

方法#3:较慢的,非正统的正则表达方式

echo implode(',', preg_match_all('/[a-z]\d+/', json_encode($array), $out) ? $out[0] : []);

输出:

s1,s2,s5,s1,s25,s1,s6,s6,s1,a2,a1,a4

---

s1,s2,s5,s1,s25,s1,s6,s6,s1,a2,a1,a4

---

s1,s2,s5,s1,s25,s1,s6,s6,s1,a2,a1,a4

答案 2 :(得分:-1)

我认为这会奏效:

$str='';
foreach($array as $k=>$v){
    if(is_array($v)){
        $str.=implode(',',$v);
    }
}