Сводный массив на основе количества строк - PullRequest
0 голосов
/ 27 мая 2020
• 1000 матрица 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?

1 Ответ

1 голос
/ 27 мая 2020

Вместо повторной обработки массива несколько раз этот код создает промежуточный массив и распределяет элементы на основе $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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...