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;
}

这与我的另一个问题有关:抓取和分解数据 它使用以下代码从数据文件中提取数据:

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()));

实际上,这不是一个修复 - 这更像是一个 hack。为了使您的代码正确,我建议您为这些$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

您的问题是您直接访问所有索引而没有先检查它们是否存在。

假设在 laravel 中某些东西导致数组没有被填充。

为了解决这个问题,您应该使用 a 遍历数组foreach,或者if(!empty($line_array[13])) {}在访问它之前执行 a 。

于 2012-08-29T15:39:50.267 回答