2017-06-20 63 views
-1

我在一个这样的数组有很多记录(元)的,基本上都是从查询与UNION ALL“关键字”:返回数组一个维度从array_map

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 
    ) 
) 

请告知

+4

FYI:你不能在你的数组中有重复的键,你的期望的结果不能实现 – Ghost

回答

1

这是不可能的,无论如何,

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

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

我希望这将有助于。

+0

Okey,似乎我可以用它来创建optgroup –

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是独一无二的。否则它将取代以前的数据。