Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.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,我刚才在描述键到值映射的工作原理时看到了这一点: $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
)