我有一个数组,里面有多个数组。这是它的样子:
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);
答案 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的功能方法,这是好的和干净的):
方法#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);
}
}