2011-11-02 36 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');