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中附加到一个空数组时,索引是2?_Php_Arrays_Indexing_Append - Fatal编程技术网

为什么,当我在PHP中附加到一个空数组时,索引是2?

为什么,当我在PHP中附加到一个空数组时,索引是2?,php,arrays,indexing,append,Php,Arrays,Indexing,Append,我在类中有一个方法,该方法将向类的数组成员追加一个项。当数组成员为空(但之前在索引1和索引2处有两个项)并且我调用该方法时,该项将插入索引2。为什么呢?如果有人一开始就不知道,我可以提供更多细节。你确定数组是空的吗?如果您打印($obj->memberArray),是否看到Array()?count($obj->memberArray)的值是多少 还有,这些键有意义吗?如果不是,并且您希望数组为空,那么您应该能够安全地运行$obj->memberArray=array\u keys($obj->

我在类中有一个方法,该方法将向类的数组成员追加一个项。当数组成员为空(但之前在索引1和索引2处有两个项)并且我调用该方法时,该项将插入索引2。为什么呢?如果有人一开始就不知道,我可以提供更多细节。

你确定数组是空的吗?如果您
打印($obj->memberArray)
,是否看到
Array()
count($obj->memberArray)
的值是多少


还有,这些键有意义吗?如果不是,并且您希望数组为空,那么您应该能够安全地运行
$obj->memberArray=array\u keys($obj->memberArray)
来重置键。我有一种预感,PHP在处理具有混合(一些数字,一些字符串)索引的数组时会做一些奇怪的事情,在这种情况下,可能会开始保留索引,在最后一个数字索引之后追加。只是一种预感,还没有测试过。

你确定数组是空的吗?如果您
打印($obj->memberArray)
,是否看到
Array()
count($obj->memberArray)
的值是多少


还有,这些键有意义吗?如果不是,并且您希望数组为空,那么您应该能够安全地运行
$obj->memberArray=array\u keys($obj->memberArray)
来重置键。我有一种预感,PHP在处理具有混合(一些数字,一些字符串)索引的数组时会做一些奇怪的事情,在这种情况下,可能会开始保留索引,在最后一个数字索引之后追加。只是一种预感,还没有测试过这一点。

如果我正确理解了你的问题,你就处于这种情况:

您首先有一个如下所示的数组:

$data = array(
    1 => 'abcd',
    2 => 'efg',
);
var_dump($data);
您可以取消设置所有元素:

unset($data[1], $data[2]);
var_dump($data);
当您插入这样的数据时:

$data[] = 'glop';
var_dump($data);
它不是放在标记0上,而是放在标记2上(实际上,它是放在标记3上的,似乎是——最后一个存在的标记,加上一个),最后给出了这个数组:

array(1) {
  [3]=>
  string(4) "glop"
}
如果这就是您的意思,则此行为将在以下内容中描述:

如上所述,如果没有钥匙 指定的,则为现有 采用整数索引,新的 键将是最大值加1。 如果还不存在整数索引,则 键将为0(零)

请注意,使用的是最大整数键 为此,目前不需要在 阵列。它只需要存在 自 上次重新索引数组时

(这里有一个例子)


希望我正确理解了这个问题(否则,您能提供一个代码、实际输出和预期输出的示例吗?),并且这有助于:-)

如果我正确理解了您的问题,您就处于这种情况:

您首先有一个如下所示的数组:

$data = array(
    1 => 'abcd',
    2 => 'efg',
);
var_dump($data);
您可以取消设置所有元素:

unset($data[1], $data[2]);
var_dump($data);
当您插入这样的数据时:

$data[] = 'glop';
var_dump($data);
它不是放在标记0上,而是放在标记2上(实际上,它是放在标记3上的,似乎是——最后一个存在的标记,加上一个),最后给出了这个数组:

array(1) {
  [3]=>
  string(4) "glop"
}
如果这就是您的意思,则此行为将在以下内容中描述:

如上所述,如果没有钥匙 指定的,则为现有 采用整数索引,新的 键将是最大值加1。 如果还不存在整数索引,则 键将为0(零)

请注意,使用的是最大整数键 为此,目前不需要在 阵列。它只需要存在 自 上次重新索引数组时

(这里有一个例子)


希望我正确理解了这个问题(否则,您能提供一个代码、实际输出和预期输出的示例吗?),这会有所帮助:-)

您是如何清空数组的$var=array();或未设置($var[1]);一些代码会很有用如何编辑您的答案以包含一些代码-一个演示这一点的最小测试用例将非常有用。还有,这是哪个版本的PHP?你是如何清空数组的$var=array();或未设置($var[1]);一些代码会很有用如何编辑您的答案以包含一些代码-一个演示这一点的最小测试用例将非常有用。另外,这是哪个版本的PHP?您完全理解了这个问题,并在被问到时回答了它。问题是我没有完全理解我的问题。我甚至读了那个数组文档,但我还以为发生了别的事情:P谢谢。你完全理解这个问题,并按要求回答了它。问题是我没有完全理解我的问题。我甚至读了那个数组文档,但我想还有别的事情发生了:P谢谢。