2017-04-14 72 views
1

我没有数组的指定数目,但他们看起来像这样:合并多阵列成字符串

array(("john","alex","tyler"),("1","2","3"),("brown","yellow","green")); 

例有3个个子阵列,但问题是这个数字可以改变。

作为最终的输出,我需要在这个例子中,3个字符串的数组。

array("john,1,brown","alex,2,yellow","tyler,3,green"); 

我试过在函数中构建,仍然没有令人满意的解决方案。

+2

是子数组的长度始终是固定的?意味着子阵没有任何限制,但它总是有3个元素? –

回答

3

使用call_user_func_arrayarray_maparray_merge函数的溶液:

$arr = [["john","alex","tyler"],["1","2","3"],["brown","yellow","green"]]; 

$groups = call_user_func_array("array_map", array_merge([null], $arr)); 
$result = array_map(function ($v) { 
    return implode(",", $v); 
}, $groups); 

print_r($result); 

输出:

Array 
(
    [0] => john,1,brown 
    [1] => alex,2,yellow 
    [2] => tyler,3,green 
) 

http://php.net/manual/en/function.call-user-func-array.php

0

在这里,我们通过将阵列中的行成列改变阵列的值。然后用内爆逗号(,)实施例每个阵列:array[1][0]将变得array[0][1]

PHP code demo

<?php 
$array=array(
     array("john","alex","tyler"), 
     array("1","2","3"), 
     array("brown","yellow","green") 
); 
$result=array(); 
for($x=0;$x<count($array);$x++) 
{ 
    for($y=0;$y<count($array[$x]);$y++) 
    { 
     $result[$x][$y]=$array[$y][$x];//changing array values 
    } 
} 
foreach($result as $key => $value) 
{ 
    $result[$key]= implode(",", $value);//combining array values on comma(,) 
} 
print_r($result); 

输出:

Array 
(
    [0] => john,1,brown 
    [1] => alex,2,yellow 
    [2] => tyler,3,green 
) 
1
使用 argument unpacking(PHP 5.6+)

简单的方法

<?php 

$array = array(array("john","alex","tyler"),array("1","2","3"),array("brown","yellow","green")); 

$result = array_map(function(...$elements) { return implode(",", $elements); }, ...$array); 

print_r($result); 

结果与其他答复相同。


这里是在稍微详细回事:

array_map(/* anonymomous function */, ...$array); 

...$array采用嵌套数组和unpackes它,就像你会打电话

array_map(/* anonymomous function */, $array[0], $array[1], ... $array[n]) 

array_map可能要经过多次数组并将给定的可调用对象应用于每一轮。

虽然匿名功能更多或更少的不逆

function(...$elements) { return implode(",", $elements); } 

...$elements需要的参数的任意的量,并把它们成一个阵列,然后将其加入到一个字符串。

0

@ ultradurable3这也可以做array_column()在这里你不用担心子阵列的数量,试图象下面这样:

<?php 
$array = array(array("john","alex","tyler"), array("1","2","3"), array("brown","yellow","green")); 
$finalArr = array(implode(",", array_column($array, 0)), implode(",", array_column($array, 1)), implode(",", array_column($array, 2))); 
echo "<pre>"; 
print_r($finalArr);