php重新分配数组内容

时间:2011-08-16 05:50:34

标签: php arrays

用于放置此类数组数据的任何特定函数或代码

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)中,依此类推

2 个答案:

答案 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
)

Working example