假设我有这个数组:
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正确迭代吗?
答案 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