2010-06-01 62 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

相关问题