Это можно сделать с помощью простого if-else
блока. Единственный выбор, как его построить, сводится к тому, что вы хотите использовать одно условие или два в выражении if
.
Способ № 1: (Output Demo) (Calculation Demo) "Единое Состояние"
$grades=array(-4,-1,0,1,6,10,70,99,100,101,105,110);
foreach($grades as $grade){
if(($grade+1)*(101-$grade) > 0){ // ($grade minus negative [lower limit])*([upper limit] plus $grad)
$validGrades[] = $grade;
}else{
$invalidGrades[] = $grade;
}
}
var_export($validGrades);
echo "\n---\n";
var_export($invalidGrades);
Способ № 2: (Output Demo) "Двойное Состояние"
$grades=array(-4,-1,0,1,6,10,70,99,100,101,105,110);
foreach($grades as $grade){
if($grade<0 || $grade>100){
$validGrades[] = $grade;
}else{
$invalidGrades[] = $grade;
}
}
var_export($validGrades);
echo "\n---\n";
var_export($invalidGrades);
Выхода (из любого метода)
array (
0 => -4,
1 => -1,
2 => 101,
3 => 105,
4 => 110,
)
---
array (
0 => 0,
1 => 1,
2 => 6,
3 => 10,
4 => 70,
5 => 99,
6 => 100,
)
* Примечания:
Между этими двумя методами будет незаметная разница в эффективности; это чисто показательно.
«Двойное условие» также может быть записано логическим оператором «И» (&&
) как if($grade<=100 && $grade>=0){
с таким же эффектом.
Поскольку прохода/провал сравнения определяется в выражении if
, нет необходимости использовать elseif
выражение - это было бы излишним.
foreach()
является более подходящей конструкцией для цикла с по сравнению с for
, потому что вызов функции count()
исключается. Это также предотвращает вашу ошибку кодирования при попытке получить доступ к классам через их индекс.
Вызов array_push()
(как и некоторые другие ответы) - это лишние накладные расходы - не то, что он действительно повлияет на ваше приложение. Мне нравится избегать вызовов функций, когда это возможно. Использование синтаксиса []
является функциональной альтернативой array_push()
.
'$ i' - ваш счетчик, вы, вероятно, захотите вместо этого сохранить $ $ grades [$ i]'. – Augwa