【发布时间】:2012-01-03 16:04:55
【问题描述】:
我昨天头疼。
基本上,我有一个带有字符串键(包含数值,但仍然是带引号的字符串)的一些数据的关联数组作为选项放入<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);
我看到了奇怪的结果——生成的 $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'
);
请注意,由于某种原因,它开始使用从 10 月到 12 月自动递增的整数键。
我可以用这个替换 array_merge 调用:
$source = array('' => $placeholder) + $source;
并且数组没有被重新输入,一切都很好,但我不明白 array_merge 案例中的场景下发生了什么。
谁能解释一下我使用array_merge 时我的数组键发生了什么?谢谢!
【问题讨论】:
-
您预计会发生什么?
-
我希望我的数组键得到维护。
-
来自文档:“输入数组中带有数字键的值将使用从零开始的递增键重新编号。”我猜 '01' 不是由函数的实现确定为数字的。 (c.f.
is_numeric('01')) -
is_numeric('01')和is_numeric('10')都返回真值 -- 为什么合并后 '10' 的键会改变,而 '01' 的键却不会? -
因为实现在幕后使用的任何逻辑都与
is_numeric使用的逻辑不同。
标签: php array-merge