Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么';PHP是否正确增加数组索引?_Php_Arrays - Fatal编程技术网

为什么';PHP是否正确增加数组索引?

为什么';PHP是否正确增加数组索引?,php,arrays,Php,Arrays,假设我有一个数组: array(12) { [0] => array(0) { } // [...] [9] => string(5) "test" [10] => array(0) { } [11] => class stdClass#5 (0) { } } 此数组中的所有项都是这样添加的$a[]=$somevalue 现在我添加另一项:$a[]=newfoobar('bar') 然而,这导致: array(13) {

假设我有一个数组:

array(12) {
  [0] =>
  array(0) {
  }
  // [...]
  [9] =>
  string(5) "test"
  [10] =>
  array(0) {
  }
  [11] =>
  class stdClass#5 (0) {
  }
}
此数组中的所有项都是这样添加的
$a[]=$somevalue

现在我添加另一项:
$a[]=newfoobar('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正确地迭代吗?

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

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

foreach ($a as $val)
{
    echo $val;
    echo "\n";
}
将打印:

2
30
bar

. 你确定你不是12-20岁吗?请出示你的完整密码@kingkero项目可能已设置和取消设置,有没有办法重置计数器?