2011-12-14 2 views
0

Как и в Java, когда вы перебираете список, это очень легко, это как: while(BLAH.hasNext()) { }, так как это сделать на PHP, когда у меня есть массив внутри stdObject, который я хочу перебирать через каждый элемент?Как выполнить итерацию массива stdObject?

я получаю Catchable fatal error: Object of class stdClass could not be converted to string in /Applications/XAMPP/xamppfiles/htdocs/index.php on line 29

<?php 
    $apiUrl = 'https://api.quizlet.com/2.0/groups/44825?client_id=***BLOCKED FROM PUBLIC***&whitespace=1'; 

    $curl = curl_init($apiUrl); 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
    $json = curl_exec($curl); 
    if ($json) { 
     $data = json_decode($json); 

     echo "<h1>Sets from \"{$data->name}\"</h1>"; 

     foreach ($data->sets as $key => $val) { 
     echo "$key: $val\n"; 
     } 
     echo "</ul>"; 
     var_dump($data); 
    } 
    ?> 
+0

Можете ли вы также предоставить фактический var_dump $ data? Если это еще не работает, атрибут «sets» не должен быть массивом. –

+0

@RyanLaBarre pastebin.com/qgWtFgxp –

+0

Aha! Sets - это массив вложенных объектов, а не массив строк. Таким образом, вы не можете эхо «val», так как «val» является под-объектом. Редактирование моего ответа, чтобы отразить это для вас, и тогда это будет отлично! –

ответ

2

Вы можете/должны использовать Еогеасп перебрать каждый элемент массива.

$foo = new stdClass; 
$foo->arr = array('1','7','heaven','eleven'); 

foreach ($foo->arr as $val) 
{ 
    if (is_object($val)) var_dump($val); 
    else echo $val; 
} 

Обратите внимание на строку, которую я добавил в под-объекты var_dump. Ошибка, которую вы первоначально получали, заключалась в том, что элементы вашего массива sets также были объектами, а не строками, как ожидалось. Если вам нужно только получить доступ к определенным элементам заданных объектов, вы можете получить к ним доступ, используя свойство $ val->.

+0

Я получаю 'Catchable fatal error: Объект класса stdClass не может быть преобразован в строку в /Applications/XAMPP/xamppfiles/htdocs/index.php в строке 29' –

+0

Эта ошибка напрямую не связана с этим кодом при ее установке. Что находится в строке 29 этого индексного файла? Можете ли вы предоставить весь код и пример некоторых фактических данных? –

+0

Я обновил главный пост. –

0

Например у вас есть объект, как

$obj = new stdClass; 
    $obj->foo = 'bar'; 
    $obj->arr = array('key' => 'val', ...); 

    $array = (array) $obj; 

теперь вы можете использовать Еогеасп перебрать массив.

foreach($array as $prop) { 
    //now if you are not sure if it's an array or not 
    if(is_array($prop)) { 
     foreach($prop as $val) 
     //do stuff 
    } 
    else { 
     //do something else 
    } 
    } 
0

$val переменных содержит другой объект (типа stdClass), который содержит данные для отдельного «набора». Как вы можете видеть, поскольку он генерирует ошибку, вы не можете echo a stdClass объект.

Вы можете получить доступ к значениям внутри каждого объекта, используя нотацию object->property, с которой вы знакомы. Например.

foreach ($data->sets as $set) { 
    echo $set->title . " by " . $set->created_by . "<br>"; 
} 

/* 

An example of the JSON object for a single $set 
Access these like $set->title and $set->term_count 

{ 
    "id": 8694763, 
    "url": "http:\/\/quizlet.com\/8694763\/wh-test-1-2-flash-cards\/", 
    "title": "WH Test 1 & 2", 
    "created_by": "GrayA", 
    "term_count": 42, 
    "created_date": 1323821510, 
    "modified_date": 1323821510, 
    "has_images": false, 
    "subjects": [ 
    "history" 
    ], 
    "visibility": "public", 
    "editable": "groups", 
} 
*/ 
Смежные вопросы