如何确定整数是否在一个范围内并存储到两个数组中?

时间:2017-02-18 17:09:34

标签: php arrays for-loop

我有一个名为$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;
    }
}

这是我到目前为止的代码。它似乎只返回计数中的数字而不是值。

4 个答案:

答案 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,
)

<强> *注:

  1. 两种方法之间的效率差异不明显;这纯粹是示范性的。

  2. &#34; Double Condition&#34;也可以用&#34;和&#34;逻辑运算符(&&)为if( $grade<=100 && $grade>=0 ){具有相同的效果。

  3. 由于传递 / 失败比较是在if表达式中确定的,因此无需使用elseif表达式 - 这将是多余的。

  4. foreach()是一个更合适的构造,可以与for进行循环,因为可以避免调用count()函数。这也可以防止您在尝试通过索引访问成绩时出现编码错误。

  5. 调用array_push()(正如其他一些答案所做的那样)是不必要的开销 - 而不是它实际上会影响您的应用程序。我希望尽可能避免函数调用。使用[]语法是array_push()的无函数替代。