2011-09-14 13 views
0

WP Alchemyを使用して、複数のチェックボックスを含むメタボックスを作成しています。CSVを配列に出力する

私が抱えている問題は、チェックボックスのオプションを作成する学術コースのCSVリストがあることです。だから私はcsvを箱を作る配列に変換しています。しかし、今のコードでは、最後の行だけが配列に作成されます。

それはPHPに来るとき、私は...、

<?php 

$file_handle = fopen('curriculum.csv', 'r'); 

while (!feof($file_handle)) { 

$line_of_text = fgets($file_handle); 
$parts = explode(',', $line_of_text); 

$items = array ($parts[2] .$parts[3],); 

} 

fclose($file_handle); 

?> 

<?php foreach ($items as $i => $item): ?> 

    <?php $mb->the_field('cb_ex3'); ?> 

    <!-- similar to test #2, the same thing can be accomplished by simply 
    adding array brackets "[]" to the name --> 
    <input type="checkbox" name="<?php $mb->the_name(); ?>[]" value="<?php echo $item; ?>"<?php $mb->the_checkbox_state($item); ?>/> <?php echo $item; ?><br/> 

<?php endforeach; ?> 

私とそう裸独学FrankinCoderよだからコードの数百行のうち、私が得るすべては最後の行です。 実際に私が働いているファイルは次のとおりです:http://www.ouhsd.k12.ca.us/educational_services/curriculum/curriculum.csv

何か助けや提案をいただければ幸いです!

+2

1. [ 'fgetcsv()'](http://php.net/fgetcsv )2. '$ items [] = ... ' – salathe

答えて

2

あなたはfgetcsv()docs)関数を使用してではなく、CSVデータを自分の意味を理解しようとしなければならないために追加しました。また、毎回新しい項目を追加してファイルをループするときに、$items配列を(上書きするのではなく)構築する必要があります。

$file_handle = fopen('curriculum.csv', 'r'); 
fgets($file_handle); // this skips the csv header line 
while (($parts = fgetcsv($file_handle)) !== FALSE) { 
    $items[] = $parts[2] . ' ' . $parts[3]; 
} 
fclose($file_handle); 

foreach ($items as $item) { 
    // Your HTML code goes here 
    echo $item . PHP_EOL; 
} 

ボーナスポイント(あなたがオブジェクトやイテレータを使用して、クーラーを見てみましょう!)

$file = new SplFileObject('curriculum.csv'); 
$file->setFlags(SplFileObject::READ_CSV); 
foreach (new LimitIterator($file, 1) as $parts) { 
    $items[] = $parts[2] . ' ' . $parts[3]; 
} 

foreach ($items as $item) { 
    // Your HTML code goes here 
    echo $item . PHP_EOL; 
} 
+0

あなたは天才で聖者です!それはチェックボックスの上にすべてを印刷していたからです。 –

4

ループの各反復では、追加するときに$項目を置き換えます。したがって、最後の値のみを保持します。

http://php.net/fgetcsvもご利用になるかもしれません。

+2

+1は私にそれを打つ。 fgetcsvは、PHPでCSVを処理する優れたアプローチです。 –

+0

私はそれがループしていると考えましたが、何も保持していませんでした。どのようにfgetcsvを作成し、爆発配列を維持するかについての任意のアイデア?私が試してみると、空白のチェックボックスが1つ残っています。: –

+0

+1 for fgetcsv。@OUHSDウェブマスター:配列に何かを追加したいときに '$ items'が' $ items [] 'となるようにしたいと思います。場合は、間違いなくfgetcsvに行く – Herbert

0

あなたのケースでは配列が必要です。 whileループ

$items = array(); 

外に初期化して、whileループ内

$items[] = array ($parts[2] .$parts[3],); 

は動作するはずです。

また、fgetcsvと同様に見てください。

+0

私はこれを試して、fgetscsvに "fgets"を変更すると、私は、それぞれに付いている配列Arrayで数百のチェックボックスを手に入れることができます。 –

+0

あなたはfgetcsvのdocumnetationを見たことがありますか? –

0

あなたの配列に余分なディメンソンが必要です。

$i=0; 
$items= new array(); // i think you need this for some fun reason 
while (!feof($file_handle)) { 

    $line_of_text = fgets($file_handle); 
    $parts = explode(',', $line_of_text); 

    $items[$i] = array ($parts[2] .$parts[3],); 

} 
+0

'new array'行の構文エラーが発生しました:/ –

0

あなたは$items配列を上書きしています。私はあなたがここで撮影したデータの構造を理解すれば、あなたの出力ループに望むように、あなたが値を使用することができると思う

<code><pre><?php 

    // in one step, load the datafile as an array, and loop over each line 
    // then explode the line by comma, and add to $lines array 
    foreach(file('curriculum.csv') as $line) 
      $lines[] = explode(',',$line); 

    // display the structure of the captured data 
    print_r($lines); 

?></pre></code> 

にはるかに簡単な方法を提案したいと思います。

codeprephpタグは利便

関連する問題