我有一个名为$grades
的数组,其中包含从负数到超过100的数字的等级。
我需要将负面成绩和100以上的成绩放入他们自己的数组中,将所有其他数字放入他们自己的数组中。
for($i = 0; $i < count($grades); $i++) {
if ($grades[$i] < 0 || $grades[$i] > 100) {
$invalidGrades[] = $i;
} else if ($grades[$i] >= 0 && $grades[$i] <= 100) {
$validGrades[] = $i;
}
}
这是我到目前为止的代码。它似乎只返回计数中的数字而不是值。
答案 0 :(得分:0)
可能是您想要使用相同的索引来分配成绩,您可以尝试这种方式
for($i = 0; $i < count($grades); $i++) {
if ($grades[$i] < 0 || $grades[$i] > 100) {
$invalidGrades[$i] = $grades[$i];
} else if ($grades[$i] >= 0 && $grades[$i] <= 100) {
$validGrades[$i] = $grades[$i];
}
}
或者如果你想推送值
for($i = 0; $i < count($grades); $i++) {
if ($grades[$i] < 0 || $grades[$i] > 100) {
$invalidGrades[] = $grades[$i];
} else if ($grades[$i] >= 0 && $grades[$i] <= 100) {
$validGrades[] = $grades[$i];
}
}
答案 1 :(得分:0)
试试这个
$grades = array(88,86,90,78,95,101,78,105,79,110);
$invalidGrades = array();
$validGrades = array();
foreach($grades as $grade) {
if ($grade > 100 || $grade < 0) {
array_push($invalidGrades, $grade);
} else {
array_push($validGrades, $grade);
}
}
print "Grades";
print_r($grades);
print "invalidGrades";
print_r($invalidGrades);
print "validGrades";
print_r($validGrades);
你应该得到以下结果。
php54s test.php
Content-type: text/html
GradesArray
(
[0] => -1
[1] => -4
[2] => -10
[3] => 88
[4] => 86
[5] => 90
[6] => 78
[7] => 95
[8] => 101
[9] => 78
[10] => 105
[11] => 79
[12] => 110
)
invalidGradesArray
(
[0] => -1
[1] => -4
[2] => -10
[3] => 101
[4] => 105
[5] => 110
)
validGradesArray
(
[0] => 88
[1] => 86
[2] => 90
[3] => 78
[4] => 95
[5] => 78
[6] => 79
)
答案 2 :(得分:0)
foreach是你最好的选择,试试这个:
//Some random grades
$grades = [1, -10, 90, 30, -3, 200, 300, 44];
$validGrades = array();
$inValidGrades = array();
foreach($grades as $grade){
if($grade < 0 || $grade > 100){
$inValidGrades[] = $grade;
}else{
$validGrades[] = $grade;
}
}
//Test the output
echo "<pre>";
print_r($grades);
echo "<br>";
print_r($validGrades);
echo "<br>";
print_r($inValidGrades);
输出将是:
Array
(
[0] => 1
[1] => -10
[2] => 90
[3] => 30
[4] => -3
[5] => 200
[6] => 300
[7] => 44
)
Array
(
[0] => 1
[1] => 90
[2] => 30
[3] => 44
)
Array
(
[0] => -10
[1] => -3
[2] => 200
[3] => 300
)
答案 3 :(得分:0)
这可以通过简单的if-else
块来完成。关于如何构造它的唯一选择取决于你是否想在if
表达式中使用一个或两个条件。
方法#1:(Output Demo)(Calculation Demo)&#34;单一条件&#34;
$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)&#34;双重条件&#34;
$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,
)
<强> *注:强>
两种方法之间的效率差异不明显;这纯粹是示范性的。
&#34; Double Condition&#34;也可以用&#34;和&#34;逻辑运算符(&&
)为if( $grade<=100 && $grade>=0 ){
具有相同的效果。
由于传递 / 失败比较是在if
表达式中确定的,因此无需使用elseif
表达式 - 这将是多余的。
foreach()
是一个更合适的构造,可以与for
进行循环,因为可以避免调用count()
函数。这也可以防止您在尝试通过索引访问成绩时出现编码错误。
调用array_push()
(正如其他一些答案所做的那样)是不必要的开销 - 而不是它实际上会影响您的应用程序。我希望尽可能避免函数调用。使用[]
语法是array_push()
的无函数替代。