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 に答える