2017-06-20 199 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是獨一無二的。否則它將取代以前的數據。