用于放置此类数组数据的任何特定函数或代码
ori [0] => 43.45,33,0,35 [1] => 74,10,0,22 [2] => 0,15,0,45 [3] => 0,0,0,340 [4] => 12,5,0,0 [5] => 0,0,0,0
到
new [0] => 43.45,74,0,0,12,0 [1] => 33,10,15,0,5,0 [2] => 0,0,0,0,0,0, [3] => 35,22,45,340,0,0
如您所见,每个ori的第一个值插入到新的(0)中,ori的第二个值插入到new(1)中,依此类推
答案 0 :(得分:3)
如果$ori
是一个数组数组,那么这应该有效:
function transpose($array) {
array_unshift($array, null);
return call_user_func_array('array_map', $array);
}
$newArray = transpose($ori);
注意:来自Transposing multidimensional arrays in PHP
如果$ ori不是数组数组,那么你需要先转换它(或者使用Peter Ajtai的例子),如下所示:
// Note: PHP 5.3+ only
$ori = array_map(function($el) { return explode(",", $el); }, $ori);
如果您使用的是旧版本的PHP,则应该只使用其他方法!
答案 1 :(得分:1)
你基本上想要转置 - 基本上是“转” - 一个数组。您的数组元素是字符串而不是子数组,但在转置之前,这些字符串可以转换为explode()
的子数组。然后在转置后,我们可以将子数组转换回implode()
的字符串,以保留您想要的格式。
基本上我们希望逐个查看五个逗号分隔数字串。我们取每串数字并将其转换为数组。要进行转置,我们必须逐个从字符串中取出每个数字,并将数字添加到新数组中。所以代码的核心是内部foreach()
。请注意每个数字如何进入新的子数组,因为$i
在每个数字之间增加1:$new[$i++][] =$op;
foreach($ori as $one) {
$parts=explode(',',$one);
$i = 0;
foreach($parts as $op) {
$new[$i++][] =$op;
}
}
$i = 0;
foreach($new as $one) {
$new[$i++] = implode(',',$one);
}
// print_r for $new is:
Array
(
[0] => 43.45,74,0,0,12,0
[1] => 33,10,15,0,5,0
[2] => 0,0,0,0,0,0
[3] => 35,22,45,340,0,0
)