Как проверить, содержит ли набор чисел определенное число в PHP? - PullRequest
0 голосов
/ 03 февраля 2019

Я создаю этот школьный проект с тегом <select>, где, если значение <option> равно определенному числу, оно не будет отображаться, отображаться или печататься.

Пример: еслинабор чисел равен 1,2,4,5,9, тогда будет показан только тег <option> со значением 3,6,7,8,10,11,12.

<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 голосов
/ 03 февраля 2019

Сделайте следующие изменения в вашем коде, это должно сработать.

$set_of_numbers = array(1,2,4,5,9) ... if (!in_array($i, $set_of_numbers))

0 голосов
/ 03 февраля 2019

Вы можете использовать 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>';
}
0 голосов
/ 03 февраля 2019

Вы должны иметь возможность проверять числа в наборе программно, например, так:

<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

Надеюсь, вы получили это:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...