2017-02-18 35 views
2

我有一個名爲$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

'$ i'是你的計數器,你可能想存儲'$ grades [$ i]'來代替。 – Augwa

回答

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]; 
     } 
} 
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 
) 
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 
) 
0

這可以用一個簡單的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, 
) 

*備註:

  1. 這兩種方法的效率之間會有不明顯的差異;這純粹是示範。

  2. 「雙重條件」也可以使用「And」邏輯運算符(&&)作爲if($grade<=100 && $grade>=0){寫入,具有相同的效果。

  3. 由於/失敗比較在if表達式確定,也沒有必要使用一個elseif表達 - 這將是多餘的。

  4. foreach()是一個比較合適的構造,可以與for進行循環,因爲可以避免調用count()函數。這也可以防止您在嘗試通過索引訪問成績時出現編碼錯誤。

  5. 調用array_push()(如其他答案所做的那樣)是不必要的開銷 - 而不是實際上會影響您的應用程序。我希望儘可能避免函數調用。使用[]語法是array_push()的無功能替代方法。