将文件中的数字除以数组列

时间:2012-05-02 22:48:18

标签: php

这个问题类似于previous question of mine,但我提出错了。我非常抱歉;这是实际问题。

我有一个包含数千个数字的文件。让我们使用它来简化:

4
7
1
9
3
3
8
6
2
6
5
1

我需要的是输出具有可变数量的矩阵行的矩阵(以数组的形式)。文件中的数字必须在行中分开,第一个数字转到第一行,第二个数字转到第二行,等等。或者,如果你愿意,第一个数字,以及之后的每四个数字,去第1列。第二个数字,以及之后的每四个数字,第2列等。在下面的示例中,行数为3:

array (
  [0] => 4,9,8,6
  [1] => 7,3,6,5
  [2] => 1,3,2,1
)

在此示例中,行数为4:

array (
  [0] => 4,3,2
  [1] => 7,3,6
  [2] => 1,8,5
  [3] => 9,6,1
)

行数是可变的。

目前,在Oscar Jara的帮助下,我现在有了这个:

$path = "data.csv";
$array = explode("\n", file_get_contents($path));
$numbers = array();
foreach(array_chunk($array, 3) as $number){
  $numbers[] = implode(",", $number);
}

但是这会从文件中输出数字而不是列:

array (
  [0] => 4,7,1
  [1] => 9,3,3
  [2] => 8,6,2
  [3] => 6,5,1
)

在将此代码转换为分割列时,我感到困惑。如果你不这样做,那么任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:2)

试试这个:

$path = "data.csv";
$data = file($path);
$numbers = Array();
$rowcount = 4;
foreach($data as $i=>$n) {
    $numbers[$i % $rowcount][] = $n;
}
// OPTIONAL: Join rows together into comma-separated string
$numbers = array_map(function($a) {return implode(",",$a);},$numbers);

答案 1 :(得分:1)

$verticallyChunked = array();
$numColumns = 4;
$i = 0;
// optionally pad the array to next largest multiple of the chunksize
// important if you output an html table and like valid well formed html
$totalRows = ceil(count($array) / $numColumns);
$array = array_pad($array, $totalRows * $numColumns, '');

foreach ($array as $val) {
    $verticallyChunked[$i++ % $numColumns][] = $val;
}