如果我有这样的数组:
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吗?
我目前这样做:
谢谢大家的回答。他们都工作。 :)
答案 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']);