如果条款不能正常工作

时间:2016-04-12 19:34:01

标签: php arrays if-statement

我有问题。我编写的代码需要指出数组的元素,这些元素比数组的下一个元素更大。 您可以在输出图片上看到数组$ arr应该只包含元素70,因为$ar[294]=70 > $ar[295]=69。但是代码以某种方式将更多元素放到$ arr中,如果语句($ar[$i]>$ar[$i+1]),则不满足。

这怎么可能?

$ar = array();
for ($i=0; $i < sizeof($retcikonacno); $i++) {
    if ($retcikonacno[$i]["n2"] >= 1001 && $retcikonacno[$i]["n2"] <= 1013) {
        array_push($ar, $retcikonacno[$i]["vpont"]);
    }   
}

echo "ar=";
echo "</br>";
print_r($ar);

echo "</br>";
echo "-------------------";
echo "</br>";
echo "-------------------";

echo "</br>" . "</br>";

$arr = array();

$size = sizeof($ar)-1;
for ($i=0; $i < $size; $i++) {
    if ($ar[$i] > $ar[$i+1]) {
        array_push($arr, $ar[$i]);
    }
}

echo "arr=";
echo "</br>";
print_r($arr);

输出:

[Output

1 个答案:

答案 0 :(得分:1)

我正在咨询我的导师,他解决了这个问题。

他说有可能php(错误地和未知原因)读取$ ar [$ i]和$ ar [$ i + 1]的内存位置而不是数组的实际值。所以if子句无效。

解: 我没有使用array_push($ ar,$ retcikonacno [$ i] [&#34; vpont&#34;])创建数组$ ar,而是使用了函数intval, 所以它是array_push($ ar,intval($ retcikonacno [$ i] [&#34; vpont&#34;]))。这创建了一组正确的值,如果clase表现良好。