我有一个包含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 );
谢谢
答案 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