从array_map返回一维数组

时间:2017-06-20 04:52:52

标签: php arrays multidimensional-array

我在这样的数组中有很多记录(元素),基本上来自带有union all'keyword'的查询:

Array
(
[0] => Array
    (
        [id] => 16
        [no_surat] => E1679
        [level] => B
    )

[1] => Array
    (
        [id] => 16
        [no_surat] => E1679
        [level] => C
    )

[2] => Array
    (
        [id] => 169
        [no_surat] => E1736
        [level] => B
    )
)

我需要将这些元素变成这样的格式:

Array
(
[16] => E1679 - B
[16] => E1679 - C
[169] => E1736 - B
)

所以,我尝试使用像这样的array_map函数:

$listNoEstimate = array_map(function ($insert) {
    return array(
        $insert['id'] => $insert['no_surat'] . ' - ' . $insert ['level']
    );
}, $listNoEstimate);

结果如下:

Array
(
[0] => Array
    (
        [16] => E1679 - B
    )

[1] => Array
    (
        [16] => E1679 - C
    )

[2] => Array
    (
        [169] => E1736 - B
    )
)

请告知

2 个答案:

答案 0 :(得分:2)

无论如何这是不可能的,

相反,你可以做这样的事情,

$result = [];
foreach($listNoEstimate as $k => $v){
     $result[$v['id']][] = $v['no_surat'].' - '.$v['level'];    
}

我希望这会有所帮助。

答案 1 :(得分:0)

没有直接的方法直接做这件事,虽然你可以像这样做

for($i=0;$i<count($listNoEstimate);$i++){
    $j=0;
    foreach($listNoEstimate[$i] as $key => $value){
        $temp[$j]=$value;
        $j++;
    }
    $listNoEstimate[$temp[0]]=$temp[1]-$temp[2];
}

注意:如果[id] => 16是唯一的,此方法可以正常运行。否则它将取代以前的数据。