Reputation: 1178
When querying the database using wpdb class in WordPress I often get a numerical array of objects:
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
)
)
I require to perform a second query using the user_id
. To retrieve the user_id
I use a foreach
loop like:
$user_ids = array();
foreach($array as $object) {
$user_ids[] = $object->user_id;
}
I want to know whether there is a PHP native better way of retrieving the user_id
and avoid the foreach altogether?
Upvotes: 1
Views: 3707
Reputation: 12168
You may try to use array_map
instead of foreach
:
$user_ids = array_map(function($obj){ return $obj->user_id; }, $array);
NOTE: This example requires at least PHP 5.3
, as it was implemented with anonymous functions.
As the benchmark shows, native foreach
-loop is faster than array_map
. It is more efficient, as it is a native language construction. If ignore this fact, other cycle constructions (while
, for
) or array_map
are the only way.
But it would be really better, if you reconstruct your query, to execute it without php-processing. There are a lot of functionality like INNER JOIN
, LEFT JOIN
, subqueries, loops and stored procedures. It might be really faster.
Upvotes: 4