Когда использовать «Break» в цикле For?

У меня есть различные страницы, каждая из которых содержит определенное количество массивов,

Например:

Страница 1 содержит только 2 массива:

$textual_button[1] = "I am a long character";
$textual_button[2] = "I am also a long character";

Страница 2 содержит 20 массивов:

$textual_button[1] = "I am a long character";
...
...
$textual_button[19] = "I am also a long character";
$textual_button[20] = "I am also a very long character";

Поэтому я хочу проверить определенное условие в первых 15 массивах (которые могут существовать — как на странице 2, или могут не существовать — как на странице 1, которая имеет значение только 2)

Я хочу применить некоторые классы стилей с именем small а также big или нет класса вообще, в зависимости от двух условий:

  1. По умолчанию не устанавливается никакой класс.

  2. Если изображение существует в массиве, проверьте длину строки первых 15 массивов.
    если все они короче 11 символов, установите big учебный класс. в противном случае установите small учебный класс.

  3. Независимо от того, существует изображение или нет, если хотя бы один массив из первых 15 содержит 14 или более символов, установите small класс (и перезаписать big класс если был задан ранее)

Это код, я не уверен, когда и как использовать break:

$class = "nothing"; //default class

if (in_array(true, $image)) { // If there's any image in array :

$class = "small"; // by default, apply small class

for($x = 1;$x <= 15;$x++){  // check on array 1 to 15
if (strlen((string)$textual_button[$x]) <= 11) {  // if all textual string are  less or equal to 11 characters , make them big
$class = "big";
};
break; // Is this necessary?
}
}

// In general, no matter if there's an image in array:

for($x = 1;$x <= 15;$x++){  // check on array 1 to 15
if (strlen((string)$textual_button[$x]) >= 14) {  // if even one textual string is 14 or more, make all of them small.
$class = "small";
};
break; // When is it necessary?
}

1

Решение

Может быть, попробовать это

$class = "nothing"; //default class

if (in_array(true, $image)) { // If there's any image in array :

$class = "small"; // by default, apply small class

for($x = 1;$x <= 15;$x++){  // check on array 1 to 15
if (strlen((string)$textual_button[$x]) <= 11) {  // if all textual string are  less or equal to 11 characters , make them big
$class = "big";
};
else {
$class = "small";
break;
}
}
}

// In general, no matter if there's an image in array:

for($x = 1;$x <= 15;$x++){  // check on array 1 to 15
if (strlen((string)$textual_button[$x]) >= 14) {  // if even one textual string is 14 or more, make all of them small.
$class = "small";
break;
};
}
1

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

В обоих ваших случаях только один раз for цикл будет происходить, потому что вы нарушаете его, ничего не проверяя. Если вы хотите проверить, все ли элементы массива соответствуют критериям, вы должны поставить break Внутри if условно:

for ($x = 1; $x <= 15; $x++) {
if (strlen((string)$textual_button[$x]) <= 11) {
$class = "big";
break;
};
}

В этом случае, если какой-либо элемент в массиве короче 11 символов, $class станет big а также for цикл перестанет выполняться. Это будет верно для второго for а также, если вы измените код аналогично первому примеру.

1

break выходит из цикла, поэтому в обоих случаях ваш цикл будет запущен только один раз или на первой итерации и затем остановится.

Так что нет, вы не должны использовать break здесь, как вы уже ограничили количество итераций до 15.

break может быть полезным (есть и другие методы …), если вы зацикливались все элементы в массиве, держать счетчик, а затем проверить, если счетчик 15, чтобы выйти из цикла.

Обратите внимание, что вы, вероятно, хотите foreach цикл в любом случае вместо for петля как for цикл с 15 итерациями приведет к предупреждению php, когда в вашем массиве меньше 15 элементов.

Что бы я лично сделал в вашем случае, это нарезать массив максимум до 15 элементов (меньше, когда меньше …) и до foreach на что.

На последнем месте: вы перезаписываете $class переменная в цикле, поэтому он, вероятно, не будет делать то, что вы ожидаете. Вы, вероятно, должны установить логическое значение false если какой-либо из элементов не соответствует вашему условию, а затем установить класс в соответствии с этим логическим после петля.

В общем, если любой должен соответствовать, вы можете использовать перерыв, но если все нужно соответствовать, вам всегда нужно закончить цикл.

1

Могли ли вы иметь в виду что-то подобное?

<?php

$class      = "nothing";
if (in_array(true, $image)) {
$class  = "small";
for($x = 1;$x <= 15;$x++){
if (strlen( (string)$textual_button[$x] ) <= 11) {
$class = "big";
// BREAK OUT OF THE LOOP INSIDE THE IF CLAUSE SINCE YOU HAVE REACHED YOUR GOAL
// WHICH IS : THE LENGTH OF $textual_button[$x] IS LESS THAN OR EQUAL TO 11
break;
}else{
// NO NEED FOR AN EXTRA LOOP SINCE IT IS ESSENTIALLY THE SAME LOOP
// JUST DO WHATEVER YOU WISH WITHIN THE ELSE CLAUSE...
// THAT IS IF: THE LENGTH OF $textual_button[$x] IS GREATER THAN OR EQUAL TO 14
// AGAIN BREAK OUT OF THE LOOP INSIDE THE ELSE CLAUSE SINCE YOU HAVE REACHED YOUR GOAL
$class = "small";
break;
}
}
}

Или как то так?

    $class      = "nothing";
if (in_array(true, $image)) {
$class  = "small";
for($x = 1;$x <= 15;$x++){
if (strlen( (string)$textual_button[$x] ) <= 11) {
$class = "big";
// BREAK OUT OF THE LOOP INSIDE THE IF CLAUSE SINCE YOU HAVE REACHED YOUR GOAL
// WHICH IS : THE LENGTH OF $textual_button[$x] IS LESS THAN OR EQUAL TO 11
break;
}
}
}

for($x = 1;$x <= 15;$x++){  // check on array 1 to 15
if (strlen( (string)$textual_button[$x]) >= 14 ) {
// AGAIN BREAK OUT OF THE LOOP INSIDE THE ELSE CLAUSE SINCE YOU HAVE REACHED YOUR GOAL
// THAT IS IF: THE LENGTH OF $textual_button[$x] IS GREATER THAN OR EQUAL TO 14
$class = "small";
break;
};
}
-1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector