mysql — PHP пропустить итерацию цикла на основе набора результатов запроса

Скажем, например, у меня есть набор результатов из запроса MySQL, который произвел значения: 3,5,10,11 и так далее …

Я хотел бы повторить цикл for в PHP, но исключить любую итерацию, которая бы равнялась любому числу в результатах моего запроса MySQL.

В настоящее время у меня есть:

for($i = 1; $i <= $num_rows; $i++)
{
if($i == 3 or $i == 5)
{
continue;
}
//Rest of loop...

Как вы все оцените, жесткое кодирование этих значений занимает очень много времени и не очень эффективно. Если кто-то может помочь, это будет с благодарностью.

0

Решение

Если вы можете автоматически собрать те значения, которые вы в данный момент жестко программируете, вы можете использовать in_array($search, $array[, $strict])

Как это :

$bypass = array(3, 5);

for($i = 1; $i <= $num_rows; $i++)
{
if( in_array($i, $bypass) )
{
continue;
}

// rest of the loop
}

PS: я предпочитаю гораздо больше ответа «Не паникуй», в котором не слишком много циклов. (in_array будет перебирать массив, чтобы найти ваше значение). Смотрите его ответ: https://stackoverflow.com/a/38880057/3799829

3

Другие решения

Если результаты вашего запроса возвращаются в виде массива, вы можете использовать
if(in_array($i, $results)) сделать проверку $ i на результаты

3

Добавьте свои значения в массив, пока вы получаете результаты вашего запроса. Я использовал здесь PDO, например, но вы должны иметь возможность адаптировать его к любому расширению базы данных, которое вы используете:

while ($row = $stmt->fetchObject()) {
$exclude[$row->value] = true;
// whatever else you're doing with the query results
}

Если вы используете значения в качестве ключей в массиве вещей, которые вы хотите пропустить, проверьте их в своем for цикл должен быть более эффективным, чем использование in_array,

for($i = 1; $i <= $num_rows; $i++) {
if (isset($exclude[$i])) continue;
// rest of loop
2
По вопросам рекламы [email protected]