致命错误: 未捕获的错误: 无法将标量用作数组警告。

64

我有以下代码:

 $final = [1 => 2];
 $id = 1;

 $final[$id][0] = 3;

这段代码看起来运行良好,但我收到了以下警告:

警告:第X行出现错误,无法将标量值用作数组(即该行的 $final[$id][0] = 3)。

有人能告诉我如何修复这个问题吗?


4个回答

104

在向$final[$id]数组添加元素之前,您需要将其设置为一个数组。可以使用以下任一方式进行初始化:

$final[$id] = array();
$final[$id][0] = 3;
$final[$id]['link'] = "/".$row['permalink'];
$final[$id]['title'] = $row['title'];

或者
$final[$id] = array(0 => 3);
$final[$id]['link'] = "/".$row['permalink'];
$final[$id]['title'] = $row['title'];

1
你可以将第一个情况中的某些行简化为 $final[$id][] = 3;,并将第二个情况简化为 $final[$id] = array(3); :) - Tadeck
2
@Tadeck 是的,你可以这样做。虽然我想表达得更明确一些 ;) - brian_d
8
这个解决方案解决了我的问题,但其中的原因我不明白。PHP在我使用它的过程中,似乎不需要声明变量的类型。我的代码一直都很正常,但昨晚突然就出现了一个莫名其妙的错误。为了规范化,在我的MVC(CodeIgniter)代码中,我通常在函数开头将$data = array()赋值类型。但在我的普通php中,我很少这样做。我认为在php中是没有必要的。然而,将我的变量声明为数组类型却解决了我的问题。真是令人困惑。 - TARKUS

95

这是因为你之前将变量声明为普通整数或字符串,然后稍后又试图将其转换为数组。


3
我看到的另一个问题是当嵌套数组时,这往往会引发警告,请考虑以下内容:
$data = [
"rs" => null
]

当像这样使用时,上述内容将完全正常:

$data["rs"] =  5;

但以下代码会抛出警告:
$data = [
    "rs" => [
       "rs1" => null;
       ]
    ]
..

$data[rs][rs1] = 2; // this will throw the warning unless assigned to an array

2
我认为在这种情况下是因为您忘记在最后一行引用 rsrs1。这使它们成为未定义的常量,因此 $data [rs] 未定义。 - Doin

-1

同时确保您不要将其声明为数组,然后尝试将其他内容分配给该数组,例如字符串、浮点数、整数。我曾经遇到过这个问题。如果您输出一些回显,第一次看到了想要的结果,但在同一段代码的另一个执行中却没有。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接