2014-02-06 94 views
-1

我从这个whant:PHP array_filter返回数组键

Array{ 
    [1] => Array{ [id] => 1, [name] => paul}, 
    [2] => Array{ [id] => 2, [name] => eva} 
} 

得到这个:

Array{ 
    [1] => paul, 
    [2] => eva 
} 

我曾经array_filter函数来实现这一目标,但它返回同一个阵列,这是输入。我究竟做错了什么?

array_filter($array, create_function('&$a','return $a["name"]);')); 

P.S.我知道我可以使用foreach,但我想这是一个oneliner。

+1

'array_filter'相当贴切*过滤器*,它不*更改数组中的元素。你正在寻找'array_map'。 – deceze

回答

2

您必须使用array_map()而不是array_filter()。 不知何故这样的:

function func($a) { 
    return $a["name"]; 
} 
array_map('func', $array); 
+0

好吧,不是一个班轮虽然 – Benedictus

0

使用array_combinearray_column

array_column()作品如果php version> = PHP 5.5

<?php 

$a=array(array('id'=>"1",'name'=>"paul"),array('id'=>"2",'name'=>"eva")); 

$a=array_combine(array_column($a,"id"),array_column($a,"name")); 
print_r($a); 

输出:

Array 
(
    [1] => paul 
    [2] => eva 
) 

Demo

+1

'array_column'在PHP 5.5 + – hindmost

+0

工作@ behindmost是我已经添加了我的答案 – Nambi

2

您需要使用array_map(),而不是array_filter() 尝试

function cube($n) 
{ 
    return($n * $n * $n); 
} 

$a = array(1, 2, 3, 4, 5); 
$b = array_map("cube", $a); 
print_r($b); 

更多信息: http://www.php.net/array_map