使用array_push()以'key =>形式向数组添加元素宾语'

时间:2011-01-23 04:32:14

标签: php

  

可能重复:
  mysql_fetch_array() expects parameter 1 to be resource, boolean given in select

我有一组想要放入数组的对象,我想用键区分它们。

我写的初始代码是:

array_push($array[$key], new myObj(param1, param2, etc));

当我运行它时,我收到警告:

PHP Warning:  array_push() expects parameter 1 to be array, null given in file.php on line 56

我添加了一个var_dump()来查看实际发生的情况,并在每个元素'$ key =>中填充数组如错误所示,为null。

如果我从行中删除[$ key],那么它会按预期填充myObj实例的数组,所以我知道构造函数正常运行而不是真正返回'null'。

2 个答案:

答案 0 :(得分:3)

关联数组中的键必须是唯一的,因此如果您想保留键/值对的概念,您可以通过键直接访问事物,请不要使用array_push,只需设置键即可(这在PHP中很好):

$array[$key] = new myObj(param1, param2, etc)

另一方面,如果您想要一个键/值对列表(如堆栈),并且一次只添加一个键/值对,请不要使用array_push,只需使用PHP的简写语法(as the manual says, this is faster as it saves you a function call)添加到数组中:

$stack[] = array($key => new myObj(param1, param2, etc));

还有一种可能性,如果你有一堆键/值对,并且想要将它们全部添加到某些堆栈结构(但不能通过某个键直接索引),那么你应该使用array_push

array_push($stack,
    array($key1 => new myObj(param1, param2, etc)),
    array($key2 => new myObj(param3, param4, etc))
);

答案 1 :(得分:0)

尝试:

$array[$key] = new myObj(param1, param2, etc);