2010-06-01 64 views
2

東西困擾我很長時間:優雅的方式來從陣列中提取值

我想這個數組轉換:

// $article['Tags'] 
array(3) { 
    [0] => array(2) { 
    ["id"] => string(4) "1" 
    ["tag"] => string(5) "tag1" 
    }, 
    [1] => array(2) { 
    ["id"] => string(4) "2" 
    ["tag"] => string(5) "tag2" 
    }, 
    [2] => array(2) { 
    ["id"] => string(4) "3" 
    ["tag"] => string(5) "tag3" 
    },  
} 

這種形式:

// $extractedTags[] 
array(3) { 
    [0] => string(4) "tag1", 
    [1] => string(4) "tag2", 
    [2] => string(4) "tag3", 
} 
目前

我我正在使用這個代碼:

$extractedTags = array(); 

foreach ($article['Tags'] as $tags) { 
    $extractedTags[] = $tags['tag']; 
} 

是否有任何更優雅的方式做到這一點,也許是一個PHP內置函數?

+0

你可以使用'array_filter'使用一個回調函數,但是這可能比你有解決方案不太優雅。我可能會堅持你所擁有的。 – 2010-06-01 11:02:35

+0

正如我對複製http://stackoverflow.com/questions/2939189/php-multi-dimensional-array-manipulation/2939204#2939204顯示最快的方法做你想要的是foreach。 'array_map'和'array_filter'具有巨大的開銷,因爲它們需要爲每個元素調用用戶定義的函數。 – 2010-06-01 14:17:54

+0

我剛剛爲php 5.5添加了這個建議:https://wiki.php.net/rfc/array_column--完全是我所要求的。 – smoove 2012-07-12 12:53:32

回答

1

您可以使用array_mapanonymous functions

// PHP 5.2 
$extractedTags = array_map(create_function('$a', 'return $a["tag"];'), $article['Tags']); 

// PHP 5.3 
$extractedTags = array_map(function($a) { return $a['tag']; }, $article['Tags']); 
+0

感謝您的回答亞歷山大。 目前我仍然必須使用PHP 5.2,而create_function調用使它更加優雅。當我切換到PHP 5.3時,我確定使用array_map方法。 – smoove 2010-06-01 11:15:33

+0

您可以預先定義函數,然後傳遞一個字符串作爲'array_map()'中的第一個參數。請注意,與簡單的foreach相比,array_map()速度較慢。 – 2010-06-01 14:18:56

相關問題