首页 > 解决方案 > 数组迭代中的 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 等之后,我已经到了可以访问给定记录上 ID 值的地步:$results[0]->ID.

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

我 - 除其他外 - 试过这个:

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

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

}

这些返回错误:

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

在这一点上,我实际上不知道如何将所有 ID 值作为逗号分隔的字符串。

我检查了许多 SO 帖子,包括以下内容: - 'Cannot use of type of stdClass as array' using Wordpress -在 PHP 中迭代 stdClass 对象 - 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 );

谢谢

标签: phparrayswordpressobjectstdclass

解决方案


你得到-

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

致命错误,因为 PHParray可以使用括号[]表示法访问,并且object' 是箭头->

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

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

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


推荐阅读