上記のすべてのコメントは質問に非常によく対応していますが、実際の回答を実際に投稿した人は誰もいないため、ここにいくつかの追加情報があります(私の回答を正当化するため):
おそらく、しかしそれは確かにそれを行うためのよりクリーンで最も読みやすい方法です
はい、しかし、人々が言ったように、バックグラウンドでループが使用されるため、これはトリックにすぎません。
これには調査が必要です。100000 エントリを使用して、あなたと同様の配列を再作成しました。
for ($i=0;$i<100000;$i++) {
$users[] = array('id' => rand(),
'name' => 'default');
}
そして、さまざまなケースを使用していくつかのテストを実行しました。
1.単純な 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 つのパラメーターすべてを考慮に入れるのが最善の方法です。