我有一个看起来像这样的数组:
Array (
[0] => Array ( [unit_id] => 1 [unit_name] => Clown Fish)
[1] => Array ( [unit_id] => L [unit_name] => Liter )
[2] => Array ( [unit_id] => 2 [unit_name] => Elephant )
[3] => Array ( [unit_id] => 3 [unit_name] => Water Bottle )
[4] => Array ( [unit_id] => 4 [unit_name] => Office Seating )
[5] => Array ( [unit_id] => 5 [unit_name] => Green Green Grass )
)
然后,我写了一个函数
function array_to_list($arr_data, $str_key, $str_value) {
$arr_list = array();
if (is_array($arr_data)) {
foreach($arr_data as $arr_value) {
if (isset($arr_value[$str_key]) && isset($arr_value[$str_value])) {
$arr_list = array_merge($arr_list, array($arr_value[$str_key] => $arr_value[$str_value]));
}
}
}
return $arr_list;
}
将数组转换为如下所示
Array (
[1] => Clown Fish )
[L] => Liter )
[2] => Elephant )
[3] => Water Bottle )
[4] => Office Seating )
[5] => Green Green Grass )
)
但是输出是
Array (
[0] => Clown Fish )
[L] => Liter )
[1] => Elephant )
[2] => Water Bottle )
[3] => Office Seating )
[4] => Green Green Grass )
)
我认为这与array_merge本身的性质有关,根据php手册“输入数组中带有数字键的值将使用从结果数组中的零开始的递增键重新编号。”
有没有办法可以生成有或没有array_merge的预期结果?
答案 0 :(得分:17)
使用'+'运算符代替array_merge()
:
function array_to_list($arr_data, $str_key, $str_value) {
$arr_list = array();
if (is_array($arr_data)) {
foreach($arr_data as $arr_value) {
if (isset($arr_value[$str_key]) && isset($arr_value[$str_value])) {
$arr_list = $arr_list + array($arr_value[$str_key] => $arr_value[$str_value]);
}
}
}
return $arr_list;
}
答案 1 :(得分:2)
为什么不尝试更简单的方法:
function array_to_list($arr_data, $str_key, $str_value) {
$arr_list = array();
if (is_array($arr_data)) {
foreach($arr_data as $arr_value) {
if (isset($arr_value[$str_key]) && isset($arr_value[$str_value])) {
// This is the changed line:
$arr_list[ $arr_value[$str_key] ] = $arr_value[$str_value];
}
}
}
return $arr_list;
}
这只是直接设置输出数组的值。没有理由创建一个新数组并每次合并它。它也应该快一点。
答案 2 :(得分:0)
删除array_merge()
并将key
和value
追加到新的$arr_list
function array_to_list($arr_data, $str_key, $str_value) {
$arr_list = array();
if (is_array($arr_data)) {
foreach($arr_data as $arr_value) {
if (isset($arr_value[$str_key]) && isset($arr_value[$str_value])) {
$arr_list[$arr_value[$str_key]] = $arr_value[$str_value];
}
}
}
return $arr_list;
}
答案 3 :(得分:-3)