PHP数组键到值映射问题
我刚才在描述键到值映射的工作原理时看到了这一点:PHP数组键到值映射问题,php,arrays,Php,Arrays,我刚才在描述键到值映射的工作原理时看到了这一点: $switching = array( 10, // key = 0 5 => 6, 3 => 7, 'a' => 4, 11, // key = 6 (maximum of integer-indices was 5
$switching = array( 10, // key = 0
5 => 6,
3 => 7,
'a' => 4,
11, // key = 6 (maximum of integer-indices was 5)
'8' => 2, // key = 8 (integer!)
'02' => 77, // key = '02'
0 => 12 // the value 10 will be overwritten by 12
);
我只是不太明白为什么11可以被分配到键6。我知道5是不可能的,因为它已经在第二个元素上用作键,所以跳过它是有意义的
但由于数组10的第一个元素被分配了键0,因此键值根据第一个索引从该点递增0..1..2..3..4,除非另有规定,否则不应在第一个位置直观地分配键4(例如,5=>6可以有键1,3=>7和键2,如果没有指定,'a'=>4可以有键3)?还有,为什么它说应该给11分配一个表示索引最大整数的键(在本例中是6,因为已经使用了5)
非常感谢您的帮助/澄清。如果问题需要澄清,请告诉我。非常感谢。它是以这种方式实现的,因为它是最有效的解决方案-只需使用
指定的最大值\u键+1
,而不是查找枚举中的漏洞。
它是以这种方式实现的,只是b因为这是最有效的解决方案-只需使用指定的最大值\u键+1
,而不是来查找枚举中的漏洞
,我相信这与PHP数组的工作方式有关。每个数组都有一个内部光标,用于每个
、当前
、下一个
、位置
和类似的方法。My猜测:当指定一个新键时,如果它高于当前光标,光标将前进到该位置,这样在该点之后添加的任何内容都将保持在当前位置+1。我认为这与PHP数组的工作方式有关。每个数组都有一个内部光标用于每个,当前,下一个
、pos
和类似的方法。我的猜测是:当指定一个新键时,如果它高于当前光标,则光标将前进到该位置,以便在该点之后添加的任何内容仍将位于当前位置+1
还有,为什么它说11
应该分配一个
表示的最大整数
指数(在本例中为6,因为5为
已经用过了吗
为什么不呢?就像虫族说的,它很有表现力,就是这样
这也或多或少是您所期望的。对于这样一个具有混合键的数组,您希望数组_push()做什么
当然,如果你在现实生活中遇到这样的事情,可能是停止和考虑一些重构的时候了。PHP中的数组是非常灵活的,必须做出一些武断的决定。它们是有文档的。唯一的选择是使数组使用更加严格。
还有,为什么它说11
应该分配一个
表示的最大整数
指数(在本例中为6,因为5为
已经用过了吗
为什么不呢?就像虫族说的,它很有表现力,就是这样
这也或多或少是您所期望的。对于这样一个具有混合键的数组,您希望数组_push()做什么
当然,如果你在现实生活中遇到这样的事情,可能是停止和考虑一些重构的时候了。PHP中的数组是非常灵活的,必须做出一些武断的决定。它们被记录在案。唯一的选择是使数组使用更加僵化。 < P>手册给出了ANSW。呃在您提供的链接中:
如上所述,如果未指定密钥,则
采用现有的整数索引,新的键是
最大值加1(但至少为0)。如果不存在整数索引
然而,密钥将是0(零)
守则:
$switching = array( 10, // key = 0
5 => 6,
3 => 7,
'a' => 4,
11, // key = 6 (maximum of integer-indices was 5)
'8' => 2, // key = 8 (integer!)
'02' => 77, // key = '02'
0 => 12 // the value 10 will be overwritten by 12
);
到目前为止,当您到达'a'
时,最大键是5
,因此根据php手册,下一个可用键是5+1,即6
请注意,使用的是最大整数键
为此,阵列中当前不需要存在此项。它只需要具有
自上次创建阵列后的某个时间存在于阵列中
重新编制索引
PHP手册在您提供的链接中给出了答案:
如上所述,如果未指定密钥,则
采用现有的整数索引,新的键是
最大值加1(但至少为0)。如果不存在整数索引
然而,密钥将是0(零)
守则:
$switching = array( 10, // key = 0
5 => 6,
3 => 7,
'a' => 4,
11, // key = 6 (maximum of integer-indices was 5)
'8' => 2, // key = 8 (integer!)
'02' => 77, // key = '02'
0 => 12 // the value 10 will be overwritten by 12
);
到目前为止,当您到达'a'
时,最大键是5
,因此根据php手册,下一个可用键是5+1,即6
请注意,使用的是最大整数键
为此,阵列中当前不需要存在此项。它只需要具有
自上次创建阵列后的某个时间存在于阵列中
重新编制索引
PHP支持这种语法的事实令人震惊。您的语句“5=>6可能有键1”不起作用:根据显式请求,它们的键是5。只需说明PHP中的数组有多糟糕。PHP支持这种语法的事实令人震惊。您的语句“5=>6可能有键1”不起作用:通过显式请求,它们的键是5。只需显示php中的Bastardized数组有多糟糕。内部游标在创建
数组时不存在step@zerkms真的吗?我会认为这是构建过程的一部分。我不知道php的内部结构,但我敢打赌,没有任何有意义的游标使se用于定制php脚本(不是内部构件)@zerkms-当然它是内部的。但正如cwallenpole所说,它就在那里,这就是next()和pos()的用法工作。它可能在构造时没有明确定义,但如果没有,则隐式为0。@timdev:它在构造数组后就在那里。内部游标在创建
数组时不存在step@zerkms真的吗?我会认为这是构建过程的一部分。我不知道php的内部结构,但我敢打赌有n
Array
(
[9] => 1
[10] => 2
[11] => 3
[12] => 4
[13] => 5
[14] => 6
[15] => 7
[16] => 8
[17] => 9
[18] => 10
)