У меня есть различные страницы, каждая из которых содержит определенное количество массивов,
Например:
Страница 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
или нет класса вообще, в зависимости от двух условий:
По умолчанию не устанавливается никакой класс.
Если изображение существует в массиве, проверьте длину строки первых 15 массивов.
если все они короче 11 символов, установите big
учебный класс. в противном случае установите small
учебный класс.
Независимо от того, существует изображение или нет, если хотя бы один массив из первых 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?
}
Может быть, попробовать это
$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;
};
}
В обоих ваших случаях только один раз for
цикл будет происходить, потому что вы нарушаете его, ничего не проверяя. Если вы хотите проверить, все ли элементы массива соответствуют критериям, вы должны поставить break
Внутри if
условно:
for ($x = 1; $x <= 15; $x++) {
if (strlen((string)$textual_button[$x]) <= 11) {
$class = "big";
break;
};
}
В этом случае, если какой-либо элемент в массиве короче 11 символов, $class
станет big
а также for
цикл перестанет выполняться. Это будет верно для второго for
а также, если вы измените код аналогично первому примеру.
break
выходит из цикла, поэтому в обоих случаях ваш цикл будет запущен только один раз или на первой итерации и затем остановится.
Так что нет, вы не должны использовать break
здесь, как вы уже ограничили количество итераций до 15.
break
может быть полезным (есть и другие методы …), если вы зацикливались все элементы в массиве, держать счетчик, а затем проверить, если счетчик 15, чтобы выйти из цикла.
Обратите внимание, что вы, вероятно, хотите foreach
цикл в любом случае вместо for
петля как for
цикл с 15 итерациями приведет к предупреждению php, когда в вашем массиве меньше 15 элементов.
Что бы я лично сделал в вашем случае, это нарезать массив максимум до 15 элементов (меньше, когда меньше …) и до foreach
на что.
На последнем месте: вы перезаписываете $class
переменная в цикле, поэтому он, вероятно, не будет делать то, что вы ожидаете. Вы, вероятно, должны установить логическое значение false
если какой-либо из элементов не соответствует вашему условию, а затем установить класс в соответствии с этим логическим после петля.
В общем, если любой должен соответствовать, вы можете использовать перерыв, но если все нужно соответствовать, вам всегда нужно закончить цикл.
Могли ли вы иметь в виду что-то подобное?
<?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;
};
}