2012-05-02 2 views
0

이 질문은 previous question of mine과 비슷하지만 잘못된 형식입니다. 나는 매우 미안 해요; 여기에 실제 문제가 있습니다.배열 열 위로 파일에서 숫자 나누기

나는 수천 개의 숫자가 서로 다른 파일이 있습니다. 이 해 사용함으로써 단순화 보자 I 필요한 것을

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

출력하도록 매트릭스의 행 번호 변수 (배열의 형태로) 행렬이다. 파일의 번호는 첫 번째 행의 첫 번째 숫자, 두 번째 숫자의 두 번째 숫자 등이있는 행에 대해 배분되어야합니다. 원한다면 첫 번째 숫자와 그 다음 네 번째 숫자, 아래의 예 등에 열 2 행 1 열 번째 숫자, 및 그 이후 매 네 번째 숫자로 행 수는 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; 
}