2011-11-02 40 views
5

這更多的是對快速建議的要求,因爲我發現很難相信手頭沒有本地功能。考慮以下幾點:PHP數組。基於密鑰的簡單拆分

array => 
(0) => array("id" => "1", "groupname" => "fudge", "etc" => "lorem ipsum"), 
(1) => array("id" => "2", "groupname" => "toffee", "etc" => "lorem ipsum"), 
(2) => array("id" => "3", "groupname" => "caramel", "etc" => "lorem ipsum") 
) 

我所希望得到的是隻使用「組名」的新陣列,就等於:

array => 
(0) => "fudge", 
(1) => "toffee", 
(2) => "caramel" 
) 

我知道這是很容易實現的遞歸通過去原始數組,但我想知道是否有更簡單的方法來實現最終結果。我環顧四周互聯網和PHP手冊並不能發現什麼

衷心感謝你閱讀這個問題 西蒙

回答

6

如果你使用PHP 5.3,你可以使用array_map[docs]這樣的:

$newArray = array_map(function($value) { 
    return $value['groupname']; 
}, $array); 

否則創建一個正常的函數並傳遞它的名字(參見文檔)。

另一種解決方案是隻迭代這個數組:

$newArray = array(); 

foreach($array as $value) { 
    $newArray[] = $value['groupname']; 
} 

你絕對不必使用遞歸。

+0

array_map!非常感謝你的回覆如此準時。迭代是我的意思,而不是遞歸,道歉。好東西:) – Simon

+0

@Simon:沒問題:)快樂編碼! –

0

據我所知在PHP中沒有一個簡單的函數可以處理這個問題,數組結構是用戶定義的,您將不得不遍歷數組。我能想到的最簡單的方法是這樣的:

for($i = 0;$i < count($main_array);$i++){ 
    $groupname_array[] = $main_array[$i]["groupname"]; 
} 
0
function array_get_keys(&$array, $key) { 
    foreach($array as &$value) $value = $value[$key]; 
} 
array_get_keys($array, 'groupname'); 

function array_get_keys(&$array, $key) { 
    $result = Array(); 
    foreach($array as &$value) $result[] = $value[$key]; 
    return $result; 
} 
$new_array = array_get_keys($array, 'groupname'); 
1

使用array_map

<?php 
$a = array(
    array("id" => "1", "groupname" => "fudge", "etc" => "lorem ipsum"), 
    array("id" => "2", "groupname" => "toffee", "etc" => "lorem ipsum"), 
    array("id" => "3", "groupname" => "caramel", "etc" => "lorem ipsum") 
); 

function get_groupname($arr) 
{ 
    return $arr['groupname']; 
} 
$b = array_map('get_groupname', $a); 

var_dump($a); 
var_dump($b); 

http://codepad.org/7kNi8nNm

3

有一個本地array_column()功能正是爲這個(因爲PHP 5.5):

$column = array_column($arr, 'groupname');