为什么PHP没有正确递增数组索引?

时间:2015-02-22 14:55:24

标签: php arrays

假设我有这个数组:

array(12) {
  [0] =>
  array(0) {
  }
  // [...]
  [9] =>
  string(5) "test"
  [10] =>
  array(0) {
  }
  [11] =>
  class stdClass#5 (0) {
  }
}

此数组中的所有项目都添加了$a[] = $somevalue

现在我添加了另一个项目:$a[] = new Foobar('bar');

然而,这导致:

array(13) {
  [0] =>
  array(0) {
  }
  // [...]
  [9] =>
  string(5) "test"
  [10] =>
  array(0) {
  }
  [11] =>
  class stdClass#5 (0) {
  }
  [21] =>
  class Foobar#8 (3) {
    protected $id =>
    string(11) "bar"
  }
}

我的Foobar对象不是$a[12],为什么?我能做些什么来让PHP正确迭代吗?

更新: 我无法在单个文件中重现此行为。不幸的是,我的代码中涉及整个框架。由于我只控制最后一个语句($a[] = new Foobar('id');),我可以在该表达式之前执行某些操作以强制PHP正确迭代吗?

1 个答案:

答案 0 :(得分:1)

我不确定你是不是这个意思,但是在这里:PHP数组不必以标准方式编入索引;如果取消设置12-20,则最后一项(即21不会更改其索引)。你也可以把字符串作为键;它更像是一个键值对,而不是您在其他语言中可能找到的标准表。您可以使用foreach迭代数组。

$a = array(
  0 => 2,
  21 => 30,
  "foo" => "bar"
);

foreach ($a as $val)
{
    echo $val;
    echo "\n";
}

将打印:

2
30
bar