上面的所有评论都很好地解决了这个问题,但由于没有人实际发布任何实际答案,这里有一些额外的信息(为了证明我的回答是合理的):
可能,但它肯定是更清洁和最易读的方式
是的,但正如人们所说,这只是一个技巧,因为循环将在后台使用。
现在这需要进行一些调查。我使用 100000 个条目重新创建了一个与您类似的数组:
for ($i=0;$i<100000;$i++) {
$users[] = array('id' => rand(),
'name' => 'default');
}
并使用不同的案例进行了一些测试:
1.Plain old for 循环(你自己用过的那个):
$ids=array();
$t = microtime(true);
foreach ($users as $key => $value) {
$ids[] = $value['id'];
}
echo microtime(true)-$t;
这平均需要 0.085 英寸
2.使用array_walk():
$t = microtime(true);
array_walk($users, create_function('$v,$k,&$ids', '$ids[0][] = $v["id"];'), array(&$ids));
echo microtime(true)-$t;
这平均需要 0.22'' (使用 $GLOBALS['ids'] 而不是这个“参考”黑客时相同)
3.使用splFixedArray:这个迭代器应该比普通数组更快。实际上,上面的代码平均需要 0.075'':
$users = new SplFixedArray(100000);
for ($i=0;$i<100000;$i++) {
$users[$i] = array('id' => rand(),
'name' => 'default');
}
$ids=array();
$t = microtime(true);
foreach ($users as $key => $value) {
$ids[$key] = $value['id'];
}
echo microtime(true)-$t;
下面的代码(我们对两个数组都使用 splFixedArray)执行得更快,大约为 0.062'':
$users = new SplFixedArray(100000);
for ($i=0;$i<100000;$i++) {
$users[$i] = array('id' => rand(),
'name' => 'default');
}
$ids=new SplFixedArray(100000);
$t = microtime(true);
foreach ($users as $key => $value) {
$ids[$key] = $value['id'];
}
echo microtime(true)-$t;
所以,最重要的是,不,这不是最快的方法,但如果你考虑到你在最初的问题中提出的所有 3 个参数,它是最好的