这个问题类似于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
)
在将此代码转换为分割列时,我感到困惑。如果你不这样做,那么任何帮助表示赞赏。
答案 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;
}