是的,我知道这已被问过无数次,但仍然感到困惑。
代码中的底线:
$this->labels[$row['id']] = $row['content'];
如何更好地编写这样以避免在PHP中非法偏移?
试图理解PHP手册但是很困惑..
使用TRUE作为键将评估为整数1作为键。使用FALSE作为键将评估为整数0作为键。使用NULL作为键将评估为空字符串。使用空字符串作为键将创建(或覆盖)具有空字符串及其值的键,它与使用空括号不同。
您不能将数组或对象用作键。这样做会导致警告:非法偏移类型。
我可以阅读哪些好文章以便将来纠正这个问题?
$sql = "SELECT `l`.`id`, `c`.`content`
FROM `{$this->table_2}` `l`
LEFT JOIN `{$this->table_3}` `c`
ON `c`.`label` = `l`.`id`;
WHERE `c`.`language` = ?
ORDER BY `l`.`name` ASC";
$labels = $this->Db->getAll($sql, $this->language);
if (empty($labels)) {
setcookie('lang', 1, time() + 31536000, '/');
$this->language= 1;
$sql = "SELECT `l`.`id`, `c`.`content`
FROM `{$this->table_2}` `l`
LEFT JOIN `{$this->table_3}` `c`
ON `c`.`label` = `l`.`id`
WHERE `c`.`language` = ?
ORDER BY `l`.`name` ASC";
$labels = $this->Db->getAll($sql, $this->lanaguage);
}
if (!empty($labels)) {
foreach($labels as $row) {
$this->labels[$row['id']] = $row['content'];
}
}
}
答案 0 :(得分:0)
您可以使用isset
(link)php函数,如下所示。
foreach($labels as $row) {
if( isset($row['id']) && isset($row['content']) ){
$this->labels[$row['id']] = $row['content'];
}
}