2016-08-28 5 views
-1

私はCSVを読み込もうとしていますが、CSVは2行あり、User-Inputと比較されます。この入力は、ユーザーが選択するIDの配列です($ talente)。 idの配列が分割され、スクリプトはCSVを開き、IDの行を読み込みます。それはうまくいくが、CSVを1行ずつ別の1次元配列に読み込む。しかし、私はすでに行が配列である必要があるので、最後に2次元配列を取得します。PHPでCSVラインを2次元配列として取得しようとしています

私のスクリプトは、これまでのようになります。

<?php 

$talente = $_GET['talente']; 

$talentline = array(); 

$i = 0; 
$myFile = fopen("talente.csv", "r"); 

foreach ($talente as $talent) { 
    if ($talent == $i+1) {   
     while (($data = fgetcsv($myFile, 1000, ",")) !== FALSE) { 

      $num = count($data); 

       for ($c=0; $c < $num; $c++) { 
        $talentline[][] = $data[$c]; 
       } 

     //$talentline[] = $lines[$i]; 

     } 
     fclose($myFile); 
    } 
    $i++; 

} 

print_r(array_values($talentline)); 

/*echo $talentline[1]; 
echo $talentline[2]; 
*/ 
?> 

結果はこれまでのすべての要素を持つすべての行であるが、代わりに2次元の1次元配列で:

Array ([0] => Array ([0] => Schild) [1] => Array ([0] => 1) [2] => Array ([0] => Licht) [3] => Array ([0] => 1w10) [4] => Array ([0] => -) [5] => Array ([0] => Schutz) [6] => Array ([0] => 1) [7] => Array ([0] => Licht) [8] => Array ([0] => 1w10) [9] => Array ([0] => -) [10] => Array ([0] => Licht) [11] => Array ([0] => 4) [12] => Array ([0] => Licht) [13] => Array ([0] => 1w10) [14] => Array ([0] => -) [15] => Array ([0] => Genesung) [16] => Array ([0] => 1) [17] => Array ([0] => Licht) [18] => Array ([0] => -) [19] => Array ([0] => -) [20] => Array ([0] => Aufopfern) [21] => Array ([0] => 1) [22] => Array ([0] => Licht) [23] => Array ([0] => -) [24] => Array ([0] => -)) 
+0

Try'fgetcsv() '? https://secure.php.net/manual/en/function.fgetcsv.php – jedifans

+0

http://php.net/manual/en/function.fgetcsv.phpを見てください –

+0

私が最初に試したことは、どういうわけか行の要素を2次元配列にする代わりに1つの配列にします。 –

答えて

1

これはどうですか? CSVを一度読み取ってから、array_filterin_arrayを使用して、CSVを目的の行に絞り込みます。

<?php 

$talente = $_GET['talente']; 

$myFile = fopen("talente.csv", "r"); 
$csv = []; 
while ($data = fgetcsv($myFile, 1000, ",")) { 
    $csv[] = $data; 
} 
fclose($myFile); 

$talentLine = array_filter($csv, function($key) use ($talente) { 
    return in_array($key, $talente); 
}, ARRAY_FILTER_USE_KEY); 

print_r(array_values($talentline)); 
+0

ありがとうございました!魅力的な作品! –

関連する問題