0

この質問は私の以前の質問に似ていますが、私はそれを間違って定式化しました。私は非常に申し訳ない; ここに実際の問題があります。

何千もの数字が互いに下にあるファイルがあります。これを使用して単純化しましょう。

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

私が必要とするのは、可変数の行列行を持つ行列を (配列の形式で) 出力することです。ファイルからの数値は、最初の数値を最初の行に、2 番目の数値を 2 番目の行に、というように行に分割する必要があります。 2 番目の数値、およびその後の 4 番目ごとの数値は、列 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 に答える