Объект stdClass в итерации массива - PullRequest
0 голосов
/ 21 декабря 2018

У меня есть массив данных, содержащий объекты stdClass, который выглядит следующим образом, если я делаю print_r($results):

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

Мне нужно получить значения идентификатора в виде строки, разделенной запятой.Для этого я изначально попытался сделать implode(",", $results), но это дало ошибки из-за объектов stdClass.Таким образом, после достаточного количества чтения и проверки SO и т. Д., Я дошел до точки, где я могу получить доступ к значению ID для данной записи: $results[0]->ID.

Однако я не знаю, сколько будет строк из-за этих данных, поступающих из запроса к БД.Итак, мне нужно перебрать каждую строку и добавить это в строку.

Я - среди прочего - попробовал это:

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

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

}

Они возвращают ошибку:

Неустранимая ошибка: неперехваченная ошибка: невозможно использовать объект типа stdClass в качестве массива

На данный момент я буквально не представляю, как получить все значения идентификатора в виде строки, разделенной запятой.

Я извлек много сообщений о SO, в том числе: - 'Невозможно использовать объект типа stdClass в качестве массива' с использованием Wordpress - , перебирая объект stdClass в 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 голосов
/ 21 декабря 2018

Это достаточно легко сделать с помощью array_column(), чтобы получить значения идентификатора;он работает так же хорошо с объектами, как и с массивами.

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

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

Вывод:

1,2,3
0 голосов
/ 21 декабря 2018

Вы получаете -

Неустранимая ошибка: необработанная ошибка: невозможно использовать объект типа stdClass в качестве массива

Неустранимая ошибка из-за PHParray доступны с помощью скобок [], а object - стрелки ->

Давайте сделаем так, используя foreach() и implode(), чтобы получить идентификаторы, разделенные запятыми, такие как 1,2,3 но я также думаю, что вы можете исправить это с конца запроса к БД без искажения вывода здесь :) надеюсь, это поможет, сэр.

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

WORKING DEMO: https://3v4l.org/oUCkL

...