2017-02-18 9 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

Try This

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

You должен получить следующее.

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

Еогеасп является лучшим вариантом здесь, попробуйте следующее:

//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. «Двойное условие» также может быть записано логическим оператором «И» (&&) как if($grade<=100 && $grade>=0){ с таким же эффектом.

  3. Поскольку прохода/провал сравнения определяется в выражении if, нет необходимости использовать elseif выражение - это было бы излишним.

  4. foreach() является более подходящей конструкцией для цикла с по сравнению с for, потому что вызов функции count() исключается. Это также предотвращает вашу ошибку кодирования при попытке получить доступ к классам через их индекс.

  5. Вызов array_push() (как и некоторые другие ответы) - это лишние накладные расходы - не то, что он действительно повлияет на ваше приложение. Мне нравится избегать вызовов функций, когда это возможно. Использование синтаксиса [] является функциональной альтернативой array_push().