我正在创建一个带有<select>
标签的学校项目,如果<option>
值等于某个数字,它将不会显示,显示或打印。
示例:如果数字集为1,2,4,5,9,则仅显示值为{3,6,7,8,10,11,12的<option>
标签。
<select name="">
<?php
$set_of_numbers = "1,2,4,5,9";
for($i=0; $i<=12; $i++) {
if($i != $set_of_numbers) {
echo '<option value='.$i.'>'.$i.'</option>';
}
}
?>
</select>
答案 0 :(得分:1)
您必须能够以编程方式检查集合中的数字,如下所示:
<select name="">
<?php
$set_of_numbers = [1, 2, 4, 5, 9];
for ($i = 1; $i <= 12; $i++) {
if (!in_array($i, $set_of_numbers)) {
echo '<option value='.$i.'>'.$i.'</option>';
}
}
?>
</select>
如果您的set of numbers
是并且只能是string
,那么您可能会选择这样的东西:
$set_of_numbers = "1,2,4,5,9";
$set_of_numbers = explode(',', $set_of_numbers); // This makes an array of the numbers (note, that the numbers will be STILL stored as strings)
如果您希望能够将数字比较为整数,则解决方案是:
$set_of_numbers = "1,2,4,5,9";
$set_of_numbers = json_decode('[' . $set_of_numbers . ']'); // This creates a valid JSON that can be decoded and all of the numbers WILL be stored as integers
希望,你有这个:)
答案 1 :(得分:1)
对您的代码进行以下更改,即可。
$set_of_numbers = array(1,2,4,5,9)
...
if (!in_array($i, $set_of_numbers))
答案 2 :(得分:1)
您可以使用array_diff仅获取不在列表中的数字。
$set_of_numbers = "1,2,4,5,9";
$numbers = explode(",", $set_of_numbers);
$range = range(1,12);
$numbers_to_output = array_diff($range, $numbers);
// [3,6,7,8,10,11,12]
foreach($numbers_to_output as $n){
echo '<option value='.$n.'>'.$n.'</option>';
}
这样,您只循环要回显的值。
其他方法将循环所有值,并且需要将每个值与您的数字列表进行比较。
该代码可以压缩为:
foreach(array_diff(range(1,12), explode(",",$set_of_numbers)) as $n){
echo '<option value='.$n.'>'.$n.'</option>';
}