使用 php 中的数字创建关联数组 - 合并 3 个数组
Create associative array with numbers in php - merge 3 arrays
我正在尝试从关联数组创建下拉列表:
`None` => `None`
之后从 01
到 24
的数字格式 -> 01, 02, 03...10,11...24
最后添加:
`25+` => `25+`
下拉菜单的键和值应该相同。
我尝试了以下方法:
$format_numbers1 = array();
$format_numbers1['None'] = 'None';
for($i=1;$i<=9;$i++) {
$numbers[] = $i;
}
foreach($numbers as $number) {
$n = str_pad($number, 2, '0', STR_PAD_LEFT);
$format_numbers2[$n] = str_pad($number, 2, '0', STR_PAD_LEFT);
}
for($j=10;$j<=24;$j++) {
$format_numbers3[$j] = $j;
}
$format_numbers_new = array_merge($format_numbers1, $format_numbers2);
$format_numbers = array_merge($format_numbers_new, $format_numbers3);
$format_numbers['25+'] = '25+';
但我得到了这个输出:
array(26) { ["None"]=> string(4) "None" ["01"]=> string(2) "01" ["02"]=> string(2) "02" ["03"]=> string(2) "03" ["04"]=> string(2) "04" ["05"]=> string(2) "05" ["06"]=> string(2) "06" ["07"]=> string(2) "07" ["08"]=> string(2) "08" ["09"]=> string(2) "09" [0]=> int(10) [1]=> int(11) [2]=> int(12) [3]=> int(13) [4]=> int(14) [5]=> int(15) [6]=> int(16) [7]=> int(17) [8]=> int(18) [9]=> int(19) [10]=> int(20) [11]=> int(21) [12]=> int(22) [13]=> int(23) [14]=> int(24) ["25+"]=> string(3) "25+" }
从 10 到 24 的下拉键不正确。
对于 10..24 的范围,您使用整数作为键,而不是字符串:
for ($j = 10; $j <=24; $j++) {
$format_numbers3["$j"] = "$j";
# here ----------^--^----^--^
}
但坦率地说,你把事情搞得太复杂了。 str_pad
可以处理不需要填充的值,因此您可以在一个循环中处理所有数字 1..24:
$format_numbers = array();
$format_numbers['None'] = 'None';
for ($i = 1 ;$i <= 24; $i++) {
$n = str_pad($i, 2, '0', STR_PAD_LEFT);
$format_numbers2[$n] = $n;
}
$format_numbers['25+'] = '25+';
另一个答案指出您使用的是整数而不是字符串,因此您丢失了 0 前缀,因此这里是整个数组的更短代码:
$numbers['None'] = 'None';
for($i=1;$i<=24;$i++) {
$n = str_pad($i, 2, '0', STR_PAD_LEFT);
$numbers[$n] = $n;
}
$numbers['25+'] = '25+';
不要使用 array_merge
,而是使用 +
运算符:
$format_numbers = $format_numbers1 + $format_numbers2 + $format_numbers3;
关于 array_merge
的文档说:
Values in the input array with numeric keys will be renumbered with incrementing keys starting from zero in the result array.
这是 +
运算符不做的事情。
我正在尝试从关联数组创建下拉列表:
`None` => `None`
之后从 01
到 24
的数字格式 -> 01, 02, 03...10,11...24
最后添加:
`25+` => `25+`
下拉菜单的键和值应该相同。
我尝试了以下方法:
$format_numbers1 = array();
$format_numbers1['None'] = 'None';
for($i=1;$i<=9;$i++) {
$numbers[] = $i;
}
foreach($numbers as $number) {
$n = str_pad($number, 2, '0', STR_PAD_LEFT);
$format_numbers2[$n] = str_pad($number, 2, '0', STR_PAD_LEFT);
}
for($j=10;$j<=24;$j++) {
$format_numbers3[$j] = $j;
}
$format_numbers_new = array_merge($format_numbers1, $format_numbers2);
$format_numbers = array_merge($format_numbers_new, $format_numbers3);
$format_numbers['25+'] = '25+';
但我得到了这个输出:
array(26) { ["None"]=> string(4) "None" ["01"]=> string(2) "01" ["02"]=> string(2) "02" ["03"]=> string(2) "03" ["04"]=> string(2) "04" ["05"]=> string(2) "05" ["06"]=> string(2) "06" ["07"]=> string(2) "07" ["08"]=> string(2) "08" ["09"]=> string(2) "09" [0]=> int(10) [1]=> int(11) [2]=> int(12) [3]=> int(13) [4]=> int(14) [5]=> int(15) [6]=> int(16) [7]=> int(17) [8]=> int(18) [9]=> int(19) [10]=> int(20) [11]=> int(21) [12]=> int(22) [13]=> int(23) [14]=> int(24) ["25+"]=> string(3) "25+" }
从 10 到 24 的下拉键不正确。
对于 10..24 的范围,您使用整数作为键,而不是字符串:
for ($j = 10; $j <=24; $j++) {
$format_numbers3["$j"] = "$j";
# here ----------^--^----^--^
}
但坦率地说,你把事情搞得太复杂了。 str_pad
可以处理不需要填充的值,因此您可以在一个循环中处理所有数字 1..24:
$format_numbers = array();
$format_numbers['None'] = 'None';
for ($i = 1 ;$i <= 24; $i++) {
$n = str_pad($i, 2, '0', STR_PAD_LEFT);
$format_numbers2[$n] = $n;
}
$format_numbers['25+'] = '25+';
另一个答案指出您使用的是整数而不是字符串,因此您丢失了 0 前缀,因此这里是整个数组的更短代码:
$numbers['None'] = 'None';
for($i=1;$i<=24;$i++) {
$n = str_pad($i, 2, '0', STR_PAD_LEFT);
$numbers[$n] = $n;
}
$numbers['25+'] = '25+';
不要使用 array_merge
,而是使用 +
运算符:
$format_numbers = $format_numbers1 + $format_numbers2 + $format_numbers3;
关于 array_merge
的文档说:
Values in the input array with numeric keys will be renumbered with incrementing keys starting from zero in the result array.
这是 +
运算符不做的事情。