首页 > 解决方案 > 基于行数的透视数组

问题描述

我有以下内容:

$array = array(1,2,3,4,5,6);

我需要“旋转”它以获得:

Array ( [0] => 1 [1] => 4 [2] => 2 [3] => 5 [4] => 3 [5] => 6 )

通过“枢轴”,我的意思是,让我们假设数组存储了一个 2 x 3 矩阵(2 行和 3 列)。我的目标是旋转它,使矩阵现在是 3 x 2 矩阵(3 行,2 列)

当然,我需要一个额外的参数,比如说“行数”(在这种情况下,这就像 2 行)

我做了以下事情:

function pivotArray($array, $nbrRows)
{
  $countTotal = count($array);
  $countCols = $countTotal / $nbrRows;

  $chunk = array_chunk($array,$countCols);

  $out = array();
  for ($row=0;$row<$nbrRows;$row++) {
    for ($col=0;$col<$countCols;$col++) {
    $out[$col][$row] = $chunk[$row][$col];
    }
  }

  $arraySingle = call_user_func_array('array_merge', $out);

  return $arraySingle;    
}

它按设计工作,但我想知道是否有更好的方法来做到这一点?例如避免 2 for 循环?并避免 array_merge ?

标签: phparrays

解决方案


此代码不是对数组进行几次重新处理,而是构建一个中间数组并基于$position % $countCols. ceil()如果有奇数个元素,我还介绍了列数......

function pivotArray($array, $nbrRows)
{
    $countTotal = count($array);
    $countCols = ceil($countTotal / $nbrRows);
    $arraySingle = [];
    foreach ( $array as $position => $value )   {
        $arraySingle[$position % $countCols][] = $value;
    }

    return array_merge(...$arraySingle);
}

推荐阅读