Скажем, например, у меня есть набор результатов из запроса 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...
Как вы все оцените, жесткое кодирование этих значений занимает очень много времени и не очень эффективно. Если кто-то может помочь, это будет с благодарностью.
Если вы можете автоматически собрать те значения, которые вы в данный момент жестко программируете, вы можете использовать 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
Если результаты вашего запроса возвращаются в виде массива, вы можете использовать
if(in_array($i, $results))
сделать проверку $ i на результаты
Добавьте свои значения в массив, пока вы получаете результаты вашего запроса. Я использовал здесь 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