如何在PHP中减少数组的内部数组值?
问题描述:
如果我有数组这样的:如何在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?
我目前做的:
感谢所有的答案。他们都工作。 :)
答
当你使用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()
来创建动态回调函数(我不会显示这个,因为它实际上伤害了我的眼睛;-))
答
$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'));
答
很多方法:
使用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
尽管这个解决方案按预期工作,我个人认为''array_reduce()'不是正确的功能对于这个用例,因为它不是一个缩减操作,而是一个映射操作(在映射和缩减的上下文中)。 – 2010-11-09 08:22:30
@Stefan Gehrig:在map-reduce - reduce部分可以以任何方式减少映射数据。它甚至可以根本不会减少它。 – zerkms 2010-11-09 10:47:15
好吧,它只是*感觉*不是真的,就好像它是正确的功能。但是,它的工作原理并不重要。 – 2010-11-09 12:00:46