在foreach中获取我的PHP数组中的未定义偏移量

时间:2012-06-11 18:43:04

标签: php arrays foreach break

我需要一些帮助,即使我认为我正在检查数组的长度而且我应该突破循环,我仍然会在我的[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;
    }

3 个答案:

答案 0 :(得分: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));
}

答案 1 :(得分:1)

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

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

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

中的->
$filter[$key]->value

答案 2 :(得分: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;
    }
}