简体   繁体   English

在PHP中用数字创建关联数组-合并3个数组

[英]Create associative array with numbers in php - merge 3 arrays

I'm trying to create dropdown from associative array starting with: 我正在尝试从关联数组开始创建下拉列表:

`None` => `None`

after that numbers from 01 to 24 in format -> 01, 02, 03...10,11...24 and finally add: 在从0124数字之后-> 01、02、03 ... 10、11 ... 24,最后添加:

`25+` => `25+`

Keys and values of dropdown should be the same. 下拉菜单的键和值应该相同。

I tried the following: 我尝试了以下方法:

$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+';

But I get this output: 但是我得到以下输出:

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+" } 

Dropdown keys from 10 to 24 aren't correct. 下拉键从10到24不正确。

The other answer points out that you are using integers and not strings so you lose the 0 prefix, so here is much shorter code for the entire array: 另一个答案指出,您使用的是整数而不是字符串,因此丢失了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+';

For the range of 10..24 you're using integers as your keys, instead of strings: 在10..24范围内,您使用整数而不是字符串作为键:

for ($j = 10; $j <=24; $j++) {
    $format_numbers3["$j"] = "$j";
    # here ----------^--^----^--^
}

But frankly, you're over-complicating things. 但坦率地说,您过于复杂了。 str_pad can handle values it doesn't need to pad, so you can handle all the numbers 1..24 in a single loop: 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+';

Don't use array_merge , but the + operator: 不要使用array_merge ,而是使用+运算符:

$format_numbers = $format_numbers1 +  $format_numbers2 +  $format_numbers3;

Documentation on array_merge says: 关于array_merge文档说:

Values in the input array with numeric keys will be renumbered with incrementing keys starting from zero in the result array. 使用数字键的输入数组中的值将使用从结果数组中的零开始的递增键重新编号。

This is something that the + operator does not do. 这是+运算符不能执行的操作。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM