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