PHP array_merge重新加密 - 它是如何工作的?

ash*_*ies 0 php array-merge

昨天我头疼.

基本上我有一个带有字符串键的数据的关联数组(包含数值,但仍然是引用的字符串)<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吗?谢谢!

Elo*_*fin 5

问题不是来自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中是相同的类型,它们都可以包含整数和字符串索引.