如何检查数字集在PHP中是否包含某个数字?

时间:2019-02-03 13:29:52

标签: php arrays html5

我正在创建一个带有<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>

3 个答案:

答案 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>';
}

这样,您只循环要回显的值。
其他方法将循环所有值,并且需要将每个值与您的数字列表进行比较。

https://3v4l.org/ub8II


该代码可以压缩为:

foreach(array_diff(range(1,12), explode(",",$set_of_numbers)) as $n){
    echo '<option value='.$n.'>'.$n.'</option>';
}