PHP-不能将标量用作数组警告
我有以下代码:PHP-不能将标量用作数组警告,php,arrays,zend-framework,warnings,scalar,Php,Arrays,Zend Framework,Warnings,Scalar,我有以下代码: $final = array(); foreach ($words as $word) { $query = "SELECT Something"; $result = $this->_db->fetchAll($query, "%".$word."%"); foreach ($result as $row) { $id = $row['page_id'];
$final = array();
foreach ($words as $word) {
$query = "SELECT Something";
$result = $this->_db->fetchAll($query, "%".$word."%");
foreach ($result as $row)
{
$id = $row['page_id'];
if (!empty($final[$id][0]))
{
$final[$id][0] = $final[$id][0]+3;
}
else
{
$final[$id][0] = 3;
$final[$id]['link'] = "/".$row['permalink'];
$final[$id]['title'] = $row['title'];
}
}
}
代码似乎工作正常,但我收到以下警告:
Warning: Cannot use a scalar value as an array in line X, Y, Z (the line with: $final[$id][0] = 3, and the next 2).
有人能告诉我如何解决这个问题吗?在向数组添加元素之前,需要将
$final[$id]
设置到数组中。将其初始化为
$final[$id] = array();
$final[$id][0] = 3;
$final[$id]['link'] = "/".$row['permalink'];
$final[$id]['title'] = $row['title'];
或
有点晚了,但是对于那些想知道为什么会收到“警告:不能将标量值用作数组”消息的人来说 原因是,您首先在某个地方用普通整数或字符串声明了变量,然后试图将其转换为数组
希望这有助于同时确保您没有将其声明为数组,然后尝试为数组分配其他内容,如字符串、浮点、整数。我有这个问题。如果您对输出进行一些回显,我第一次看到的是我想要的,但不是在再次传递相同的代码之后。请确保之前没有将其声明为整数、浮点、字符串或布尔值。
另一个问题是当嵌套数组时,它倾向于抛出警告,请考虑以下内容:
$data = [
"rs" => null
]
使用上述方法时,效果绝对良好,如:
$data["rs"] = 5;
但以下内容将发出警告:
$data = [
"rs" => [
"rs1" => null;
]
]
..
$data[rs][rs1] = 2; // this will throw the warning unless assigned to an array
这是真的密码吗?我试图重现这个问题,但我无法…@alvaro-g-vicario您是对的,列出的代码缺少可能导致错误的语句。类似于
$final[$id]=$row['page_id']代码>是让PHP抱怨的必要条件,这才是真正的代码。是复制粘贴如果数据库返回0作为一个值,并且您的变量是一个数组,您需要在从db读取后将其重新定义为一个数组。严重错误!您正在检查$final[$id][0]是否为空,但如果为空,则0为空。。。根本不是一个数组,所以它将100%发生!在第一种情况下,您可以将某些行简化为$final[$id][]=3
和在$final[$id]=数组(3)的第二个中代码>:)@Tadeck是的,你可以,我想我会很明确;)这个解决方案解决了我的问题,但我无法理解它的“原因”。就我使用过的PHP而言,它不需要声明变量的类型。我的代码运行得很好,但昨晚出于某种莫名其妙的原因,它开始从晴朗的蓝天中吐出这个错误。当然,在我的MVC(CodeIgniter)代码中,我经常在函数顶部指定$data=array()类型。在我的简朴的php中,我很少这样做。在php中,我认为这不是强制性的。然而,将变量声明为数组类型解决了我的问题。但是为什么php在一开始就把数组元素分配给那个“平面”变量时不抱怨呢?我不确定我是否理解marki555;如果你从一开始就把它声明为一个数组,那么你很好,我认为这个解释在这种情况下非常重要,但这似乎不是它在一个以前没有发生过的文件中发生在我身上的原因。我很困惑为什么要把它写进我的代码里。突然,我发现了另一个导致此消息的实例。在使用“global$index”和$GLOBALS[“index”]之间存在争议-它们引用相同的变量。那么,如果需要添加字符串,如何添加新元素?
$data = [
"rs" => [
"rs1" => null;
]
]
..
$data[rs][rs1] = 2; // this will throw the warning unless assigned to an array