非法字符串偏移 - 小问题

时间:2015-10-26 12:22:43

标签: php

是的,我知道这已被问过无数次,但仍然感到困惑。

代码中的底线:

$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'];
                }
        }
}

1 个答案:

答案 0 :(得分:0)

您可以使用issetlink)php函数,如下所示。

foreach($labels as $row) { 
  if( isset($row['id']) && isset($row['content']) ){
    $this->labels[$row['id']] = $row['content'];
  }
}
相关问题