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

Php 如何确定整数是否在一个范围内并存储到两个数组中?,php,arrays,for-loop,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 &am

我有一个名为
$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;
    }
}
for($i=0;$i100){
$invalidGrades[]=$i;

}否则,如果($grades[$i]>=0&&$grades[$i]可能是您想要使用相同的索引分配等级,您可以尝试这种方法

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;$i100){
$invalidGrades[$i]=$grades[$i];
}如果($grades[$i]>=0&&$grades[$i]100),则为else{
$invalidGrades[]=$grades[$i];
}否则,如果($grades[$i]>=0&&$grades[$i]尝试此方法

$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);

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);

这可以通过一个简单的
if-else
块来完成。关于如何构造它的唯一选择归结为在
if
表达式中使用一个或两个条件

方法1:()“单一条件”

方法2:()“双重条件”

*注意:

  • 这两种方法在效率上会有不明显的差异;这纯粹是说明性的

  • 如果($grade=0){
  • ,也可以使用“And”逻辑运算符(
    &&&
    )将“双条件”写入
    ,具有相同的效果

  • 由于通过/失败比较是在
    if
    表达式中确定的,因此不需要使用
    elseif
    表达式——这是多余的

  • foreach()
    for
    相比,是一种更适合循环的构造,因为可以避免调用
    count()
    函数。这还可以防止在尝试通过等级索引访问等级时出现编码错误

  • 调用
    array\u push()
    (正如其他一些答案所做的那样)是不必要的开销——并不是说它实际上会影响应用程序。我喜欢尽可能避免函数调用。使用
    []
    语法是
    array\u push()
    的无函数替代方法


  • $i
    是您的计数器,您可能希望存储
    $grades[$i]
    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
    )
    
    //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
    )
    
    $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);
    
    $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,
    )