我正在使用WP Alchemy创建一个带有多个复选框的元框。
我遇到的麻烦是,我有一个csv学术课程列表,我想创建复选框选项。所以我把csv变成了一个盒子制成的阵列。但是,根据我现在的代码,只在数组中创建了LAST行。
当谈到php时,我是一个自学的FrankinCoder,对我来说很光......
<?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; ?>
在几百行代码中,我得到的只是最后一行。 这是我正在使用的实际文件:http://www.ouhsd.k12.ca.us/educational_services/curriculum/curriculum.csv
非常感谢任何帮助或建议!
答案 0 :(得分:4)
在循环的每次迭代中,如果要添加$ item,则替换$ items,因此它只有最后一个值。
http://php.net/fgetcsv也可能对你有用。
答案 1 :(得分: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;
}
答案 2 :(得分:0)
项目应该是您的案例中的数组。在while循环之外初始化
$items = array();
然后在while循环中
$items[] = array ($parts[2] .$parts[3], );
应该有用。
另请参阅fgetcsv以及建议。
答案 3 :(得分: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], );
}
答案 4 :(得分: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
,pre
和php
个标记