Dut*_*fee 6 php foreach function laravel
我正用头撞在我的桌子上,试图弄清楚为什么这个 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;
}
Run Code Online (Sandbox Code Playgroud)
这种类型与我的另一个问题相吻合:Grab and Explode Data 它使用以下代码从数据文件中提取数据:
elseif($data_record[3] == "PILOT")
{
$code_obj->set_pilots_array($data_record);
}
Run Code Online (Sandbox Code Playgroud)
稍后这样做:
$code_count = $code_obj->get_pilots_count();
Run Code Online (Sandbox Code Playgroud)
你没有$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()));
Run Code Online (Sandbox Code Playgroud)
实际上,这不是修复 - 这更像是一种黑客攻击。为了使您的代码正确,我建议您为这些$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();
}
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
嗯,代码太少,无法真正弄清楚发生了什么,但根据我所看到的:
if($airport == $line_array[13])
Run Code Online (Sandbox Code Playgroud)
这个条件永远不会被满足,所以$deparr = "arr";永远不会发生,因为这个
count($this->pilots['arr']);
Run Code Online (Sandbox Code Playgroud)
给出了未定义的索引错误
您可以通过以下方式轻松抑制这种情况:
$count = count(@$this->pilots['dep']) + count(@$this->pilots['arr']);
Run Code Online (Sandbox Code Playgroud)