2011-09-14 4 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

당신은 천재이자 성도입니다! 작동했습니다! :) 내가 조작 한 유일한 것은 echo $item . PHP_EQL; 체크 박스 위에 모든 것을 인쇄했기 때문에. –

4

루프를 반복 할 때마다 추가 할 때 $ 항목을 대체하므로 마지막 값만 있습니다.

http://php.net/fgetcsv은 다소 유용 할 수 있습니다.

+2

+1은 나를 때린다. fgetcsv는 PHP에서 CSV를 처리하는 훌륭한 접근 방식입니다. –

+0

나는 그것이 반복하고 있지만 아무것도 보관하지 못하고 있다고 생각했다. 그것을 fgetcsv로 만들고 explode 배열을 유지하는 방법에 대한 아이디어가 있습니까? 내가 시도하는 모든 것은 하나의 빈 확인란으로 나를 남겨 둡니다.: –

+0

+1 for fgetcsv. @OUHSD 웹마 스터 : 나는 (미래 참조를 위해) 배열에 무언가를 추가하고 싶을 때'$ items'가'$ items []'이 될 것이라고 덧붙이고 싶습니다. 경우, fgetcsv 함께 확실히 이동하십시오. – Herbert

0

항목은 케이스에 배열이어야합니다. while 루프 외부

$items = array(); 

를 초기화 그리고 while 루프 내부에

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

작동합니다.

fgetcsv뿐만 아니라 제안 사항을 살펴보십시오.

+0

내가 이것을 시도하고 fgetscsv "fgets"을 변경하면 "나는 각각의 단어를 배열과 함께 몇 백 체크 박스를 얻을. 내가 CSV의 각 라인에 대해 하나라고 생각 그래서 어쩌면 내가 더 가까이? –

+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> 

여기에 캡처 된 데이터의 구조를 이해하면 내 생각에 훨씬 간단한 방법을 제안하고 싶습니다.

code, prephp 태그 편리

관련 문제