2012-05-02 4 views
0

この質問はprevious question of mineに似ていますが、間違っています。私は非常に申し訳ない;ここに実際の問題があります。配列の列のファイルから数値を割り出す

私はお互いの下に何千という数字のファイルを持っています。のは、これを使用して簡素化してみましょう:私は必要なもの

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

が出力するマトリックスの行の可変数を持つ(配列の形で)行列です。ファイルからの数字は、最初の行が最初の行に、2番目が2番目の行に、などのように、行の上に割り振られなければなりません。もし望むなら、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 
) 

行数は可変です。

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

をしかし、これは、行の代わりに列を介してファイルから数値を出力します:

現在、Oscar Jaraの助けを借りて、私は今、これを持って

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

これを変換するとき、私は混乱してしまいますコードを列に分割します。あなたがしなければ、どんな助けもありがとう。

答えて

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); 
+0

これは素晴らしいですが、おかげで:-) – Pr0no

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; 
} 
関連する問題