如何在PHP中减少数组的内部数组值?

时间:2010-11-09 01:36:35

标签: php arrays multidimensional-array

如果我有这样的数组:

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

这是我得到的数据,我希望有效地删除每个内部数组的第二个值。 (例如“Ele1”,“Ele2”......)

这就是我的所作所为:

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

而不是让for循环读取并将值赋给新数组。最好的方法是什么?我应该使用的任何php内置函数?

喜欢array_map吗?

我目前这样做:


谢谢大家的回答。他们都工作。 :)

3 个答案:

答案 0 :(得分:4)

当您使用PHP 5.3时,解决方案可以非常优雅:

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

在PHP&lt; 5.3你必须创建一个回调函数

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

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

答案 1 :(得分: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'));

答案 2 :(得分: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']);