数组迭代中的stdClass对象

时间:2018-12-21 17:05:24

标签: php arrays wordpress object stdclass

我有一个包含stdClass对象的数据数组,如果执行print_r($results),则看起来像这样:

Array ( 
    [0] => stdClass Object ( 
        [ID] => 1 
    ) 
    [1] => stdClass Object ( 
        [ID] => 2 
    ) 
    [2] => stdClass Object ( 
        [ID] => 3 
    ) 
) 

我需要获取ID的值作为逗号分隔的字符串。为此,我最初尝试做implode(",", $results),但这由于stdClass对象而产生了错误。因此,经过合理的阅读和检查SO等之后,我已经可以访问给定记录$results[0]->ID上的ID值。

但是,由于该数据来自数据库查询,我不知道会有多少行。因此,我需要遍历每一行并将其添加到字符串中。

我-还有其他事情-尝试过:

$i = 0;
foreach ($results as $result){

    //$result->ID;
    $result[$i]['ID'];
    $i++

}

这些返回错误:

  

致命错误:未捕获错误:不能将stdClass类型的对象用作   数组

我现在还不知道如何将所有ID值作为逗号分隔的字符串来获取。

我检查了许多SO帖子,包括:  -'Cannot use object of type stdClass as array' using Wordpress  -iterating through a stdClass object in PHP  -PHP Loop stdClass Object

更新 我得到的数据如下:

global $wpdb;    
$query = "Select wp_users.ID from wp_users where wp_users.ID not in ( select wp_usermeta.user_id from wp_usermeta where wp_usermeta.meta_key = 'grp2_profile_visiblity' and wp_usermeta.meta_value = 1 order by wp_usermeta.user_id ) order by wp_users.ID"; 
$results = $wpdb->get_results( $query, OBJECT );

谢谢

2 个答案:

答案 0 :(得分:2)

您正在得到-

  

致命错误:未捕获错误:不能将stdClass类型的对象用作   数组

致命错误,因为可以使用括号array表示法访问PHP [],而箭头object则是->

让我们使用foreach()implode()来获得1,2,3这样的逗号分隔ID,但我也认为您可以从数据库查询端修复它,而无需在这里处理输出:)希望这对先生有帮助。

$expected = [];
foreach ($results as $key=>$obj){
    $expected[] = $obj->ID;
}
echo implode(',',$expected);

工作演示: https://3v4l.org/oUCkL

答案 1 :(得分:1)

使用array_column()可以很容易地完成操作以获得ID值;它对对象的作用与对数组的作用一样。

<?php
// some sample data
$results = json_decode('[{"ID": 1}, {"ID": 2}, {"ID": 3}]');

$return = implode(",", array_column($results, "ID"));
echo $return;

输出:

1,2,3