2010-11-09 100 views
2

如果我有数组这样的:如何在PHP中减少数组的内部数组值?

array(
    array('id'=>123,'name'=>"Ele1"), 
    array('id'=>12233,'name'=>"Ele2"), 
    array('id'=>1003,'name'=>"Ele4"), 
    array('id'=>1233,'name'=>"Ele5") 
) 

这是我得到的数据,我想effeciently删除所有内部数组的第二个值。 (例如,“ELE1”,“Ele2” ....)

这里是我做的:

$numEle = count($arrayA); 
$_arrayB = array(); 
for ($i=0; $i<$numEle ; $i++) 
{ 
array_push($_arrayB , $arrayA[$i]['id']); 
} 

而不是有一个for循环读取和值分配到一个新的数组。什么是最好的方式来做到这一点?任何PHP的内置函数我应该使用?

like array_map?

我目前做的:


感谢所有的答案。他们都工作。 :)

回答

4

当你使用PHP 5.3的解决方案可以很优雅:

$b = array_map(function($item) { return $item['id']; }, $arrayA); 

在PHP 5.3 <你需要创建一个回调函数

function mapCallback($item) { 
    return $item['id']; 
} 
$b = array_map('mapCallback', $arrayA); 

或使用create_function()来创建动态回调函数(我不会显示这个,因为它实际上伤害了我的眼睛;-))

1
$s = array(
    array('id'=>123,'name'=>"Ele1"), 
    array('id'=>12233,'name'=>"Ele2"), 
    array('id'=>1003,'name'=>"Ele4"), 
    array('id'=>1233,'name'=>"Ele5") 
); 

function reduce($a, $b) 
{ 
     $a[] = $b['id']; 
     return $a; 
} 

var_dump(array_reduce($s, 'reduce')); 
+0

尽管这个解决方案按预期工作,我个人认为''array_reduce()'不是正确的功能对于这个用例,因为它不是一个缩减操作,而是一个映射操作(在映射和缩减的上下文中)。 – 2010-11-09 08:22:30

+0

@Stefan Gehrig:在map-reduce - reduce部分可以以任何方式减少映射数据。它甚至可以根本不会减少它。 – zerkms 2010-11-09 10:47:15

+0

好吧,它只是*感觉*不是真的,就好像它是正确的功能。但是,它的工作原理并不重要。 – 2010-11-09 12:00:46

1

很多方法:

使用array_walk:

array_walk($a, function(&$b) { unset($b['name']); }); 

使用array_map:

$b = array_map(function($el) { return array('id' => $el['id']); }, $a); 

简化自己的例子:

foreach($a as $key => $el) 
    $b[] = array('id' => $el['id']); 
+0

请注意,第一个示例通过引用修改数组。如果您需要原始文件,请先复印一份。 – Hamish 2010-11-09 01:55:54