6

このPHPコードがこのエラーを引き起こしている理由を突き止めようとして、机に頭をぶつけています: Undefined index: arr. 私は Laravel を使用しており、このコードは外側では金のように機能しますが、Laravel 内では未定義のインデックス エラーが返されます。

コードは次のとおりです。

function set_pilots_array($line_array)
{
    $airports = $this->airports;
    $pilots = $this->pilots;
    foreach($airports as $airport)
    {
        if($airport == $line_array[11] || $airport == $line_array[13])
        {
            if($airport == $line_array[11])
            {
                $deparr = "dep";
            }
            if($airport == $line_array[13])
            {
                $deparr = "arr";
            }
            $this->pilots[$deparr][] = array($line_array[0], $line_array[11], $line_array[13], $line_array[7], $line_array[5], $line_array[6], $line_array[8]);
        }
    }
}

function get_pilots_count()
{
    $count = count($this->pilots['dep']) + count($this->pilots['arr']);
    return $count;
}

この種の質問は、次の質問と同じです: Grab and Explode Data 次のコードを使用して、データ ファイルからデータを取得しています。

elseif($data_record[3] == "PILOT")
{
    $code_obj->set_pilots_array($data_record);
}

後でこれを行います:

$code_count = $code_obj->get_pilots_count();
4

3 に答える 3

5

設定がありません$this->pilots['arr']。つまり、 の出力を見ると、キーと値のペアvar_dump($this->pilots);がないことがわかります。arrこの修正をお勧めします:

$count = count((isset($this->pilots['dep']) ? $this->pilots['dep'] : array())) + count((isset($this->pilots['arr']) ? $this->pilots['arr'] : array()));

実際、これは修正ではなく、ハックに似ています。コードを正しく$pilots['arr']するために、それらと値のデフォルト値を設定することをお勧めします$pilots['dep']:

function set_pilots_array($line_array)
{
    $airports = $this->airports;
    $pilots = $this->pilots;

    foreach (array('dep', 'arr') as $key) 
    {
        if (!is_array($pilots[$key]) || empty($pilots[$key])) 
        {
            $pilots[$key] = array();
        }
    }

    // ...
}
于 2012-08-29T15:31:08.413 に答える
2

何が起こっているのかを実際に理解するにはコードが少なすぎますが、私が見たものに基づいています:

if($airport == $line_array[13])

この条件が満たされることは決してない$deparr = "arr";ため、発生することはありません。

count($this->pilots['arr']);

未定義のインデックスエラーが発生しています

これは次の方法で簡単に抑制できます。

$count = count(@$this->pilots['dep']) + count(@$this->pilots['arr']);
于 2012-08-29T15:29:19.577 に答える
0

your problem is that you are accessing all of your indexes directly without checking if they exist first.

assume that in laravel something is causing the array to not be populated.

in order to fix this, you should either iterate through the array with a foreach, or do a if(!empty($line_array[13])) {} before accessing it.

于 2012-08-29T15:39:50.267 に答える