避免多个foreach循环

时间:2013-07-29 10:36:49

标签: php foreach

在WordPress中使用wpdb类查询数据库时,我经常得到一个数值对象数组:

array(
    [0] => stdClass(
        comment_ID = 3
        comment_post_ID = 19
        user_id = 7
    )
    [1] => stdClass(
        comment_ID = 5
        comment_post_ID = 19
        user_id = 6
    )
)

我需要使用user_id执行第二次查询。要检索user_id我使用foreach循环,如:

$user_ids = array();

foreach($array as $object) {
    $user_ids[] = $object->user_id;
}

我想知道是否有一种PHP本地更好的方法来检索user_id并完全避免使用foreach?

1 个答案:

答案 0 :(得分:4)

您可以尝试使用array_map代替foreach

$user_ids = array_map(function($obj){ return $obj->user_id; }, $array);

注意:此示例至少需要PHP 5.3,因为它是使用anonymous functions实现的。


正如基准测试所示,原生foreach - 循环is faster而不是array_map。它更有效率,因为它是一种本地语言结构。如果忽略这一事实,其他循环结构(whilefor)或array_map是唯一的方法。


但如果你重新构建你的查询,那么在没有php处理的情况下执行它会更好。有很多功能,如INNER JOINLEFT JOIN,子查询,循环和存储过程。它可能真的更快。