我有一个数组,其中的数组表示数据库中的值。
db表中有100多个列,因此实际计数远远高于下面示例中的6个值(子数组(数组中的数组)索引为0-5)。
列在子数组的每个索引中,行在主数组的每个索引中。
这是我的带有子阵列的主要阵列:
Array
(
[0] => Array
(
[0] => N
[1] => N
[2] => Y
[3] => Y
[4] => Y
[5] => Y
)
[1] => Array
(
[0] => N
[1] => N
[2] => Y
[3] => Y
[4] => N
[5] => Y
)
[2] => Array
(
[0] => N
[1] => N
[2] => Y
[3] => Y
[4] => N
[5] => Y
)
[3] => Array
(
[0] => Y
[1] => Y
[2] => Y
[3] => Y
[4] => Y
[5] => Y
)
我需要做的是将每个子索引的所有值合并到一个数组中,如下所示:
Array
(
[0] => N,N,N,Y
[1] => N,N,N,Y
[2] => Y,Y,Y,Y
[3] => Y,Y,Y,Y
[4] => Y,N,N,Y
[5] => Y,Y,Y,Y
)
列数(子索引)总是相同,但是行数(索引)却不同。
答案 0 :(得分:2)
这个想法是按列获取数据,很幸运,有一个内置函数。其array_column
。
因此,首先获取列数,然后简单地使用for循环。然后,只需使用implode
并将其分配到新容器中即可:
$new = array(); // container
$count = count($arr[0]); // get the number of colums
for ($i = 0; $i < $count; $i++) {
// get the data by column number ($i), then implode and push inside
$new[] = implode(',', array_column($arr, $i));
}
这是一个示例output
答案 1 :(得分:0)
我假设您已将$column
定义为数据库表中的列总数。使用array_column
根据列键获取值。
$result = array();
for ($i = 0; $i < $column; $i++) {
$res = array_column($arr, $i);
$result[] = implode(",", $res);
}
有关array_column
功能的更多信息,请选中此link。
哦,只是告诉您array_column
函数仅适用于PHP 5.5及更高版本。
答案 2 :(得分:0)
检查这是否是您想要的
$arr = array(//your array);
$newArr = array(); //data wil lbe saved here
foreach($arr as $arr_one){
$string = "";
foreach($arr_one as $subArr){
$string.=$subArr.",";
}
array_push($newArr,rtrim($string,','));
}
var_dump($newArr);
答案 3 :(得分:0)
避免使用显式循环,例如for
和while
。使用array_map
(它可以遍历数组的可变数目):
$result = array_map(function (...$column) {
return implode(',', $column);
}, ...$array);
这里是the demo。
在linear algebra中,这称为矩阵的transpose。