1

我需要一些帮助,即使我认为我正在检查数组的长度并且我应该跳出循环,我仍然在我的 [else if ($value....] 行上收到警告。所以要么我遗漏了一些重要的东西,或者我一直盯着这个代码段太久,而且很明显。任何见解都将不胜感激。

    $count = count($filter); //Filter is an array
    if ($count > 1 ){
        //Compare values and generate a range to choose from
        $i = 1;
        foreach($filter as $value){
            //Break the loop if at the end of the array
            if ($i >= $count){
                //throw new exception($i .' '.$count);
                break;
            }
            //if the value is smaller then the next procceding value, because they are already in order of presidence,
            //add it to our range of potentials.
            else if($value < $filter[$i]->value){
                array_push($range, key($filter));
            }
        $i++;
        }           
    }else {
        return false;
    }
4

3 回答 3

1

我怀疑您的阵列中存在间隙。试试这个:

$filter = array_values($filter); // this will remove any gaps in the array
$count = count($filter);
if ($count <= 1)
    return false;

for ($i = 0; $i < $count; $i++)
{
    if ($i != $count-1 && $filter[$i]->value < $filter[$i+1]->value)
        array_push($range, key($filter));
}
于 2012-06-11T18:52:41.147 回答
1

您的数组可能有非数字键。然后试试这个:

foreach($filter as $key=>$value)
{
   // test for $filter[$key];
}

或者你的 $filter 数组不包含对象,那么你不能使用->in

$filter[$key]->value
于 2012-06-11T19:20:15.350 回答
0

试试这个代码..不需要检查计数..

$range = array();
$i = 1;
foreach($filter as $value)
{
    if(isset($filter[$i]) && $value < $filter[$i]->value)
    {
        array_push($range, key($filter));
        $i++;
    }
    else
    {
        break;
    }
}
于 2012-06-11T18:53:28.387 回答