0

这个问题和我之前的问题类似,但我表述错了。我很抱歉; 这是实际的问题。

我有一个文件,其中有数千个数字。让我们使用这个来简化:

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
)

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

4

2 回答 2

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);
于 2012-05-02T22:53:10.680 回答
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;
}
于 2012-05-02T23:26:03.963 回答