昨天我头疼.
基本上我有一个带有字符串键的数据的关联数组(包含数值,但仍然是引用的字符串)<select>作为选项放在一个框中.我想在占位符值的前面添加一个占位符值.
我试图使用array_merge:
$placeholder = "Month";
$source = array
(
'01' => '01 - January',
'02' => '02 - February',
'03' => '03 - March',
'04' => '04 - April',
'05' => '05 - May',
'06' => '06 - June',
'07' => '07 - July',
'08' => '08 - August',
'09' => '09 - September',
'10' => '10 - October',
'11' => '11 - November',
'12' => '12 - December'
);
$source = array_merge(array('' => $placeholder), $source);
Run Code Online (Sandbox Code Playgroud)
我看到了奇怪的结果 - 结果$source数组类似于以下内容:
(
'' => 'Month',
'01' => '01 - January',
'02' => '02 - February',
'03' => '03 - March',
'04' => '04 - April',
'05' => '05 - May',
'06' => '06 - June',
'07' => '07 - July',
'08' => '08 - August',
'09' => '09 - September',
0 => '10 - October',
1 => '11 - November',
2 => '12 - December'
);
Run Code Online (Sandbox Code Playgroud)
请注意,由于某种原因,它开始使用10月到12月似乎是自动递增的整数键.
我可以用这个替换array_merge调用:
$source = array('' => $placeholder) + $source;
Run Code Online (Sandbox Code Playgroud)
并且数组没有重新键入,一切都很好,但我不明白在array_merge案例中幕后发生了什么.
有人可以解释我使用时阵列键发生了什么array_merge吗?谢谢!
问题不是来自array_merge()功能.
如果你$source在合并前打印,你会得到:
array(12) {
["01"]=>
string(12) "01 - January"
["02"]=>
string(13) "02 - February"
// ...
}
Run Code Online (Sandbox Code Playgroud)
尝试将您的第一个密钥重命名'01'为'1',您将获得以下回报:
array(12) {
[1]=>
string(12) "01 - January"
["02"]=>
string(13) "02 - February"
// ...
}
Run Code Online (Sandbox Code Playgroud)
PHP自动将您的密钥转换为整数.但我不能说你为什么这样做.
编辑:
我在php.net(PHP.net)上找到了答案:
键可以是整数或字符串.如果一个键是整数的标准表示,它将被解释为这样(即"8"将被解释为8,而"08"将被解释为"08").键中的浮点数被截断为整数.索引和关联数组类型在PHP中是相同的类型,它们都可以包含整数和字符串索引.