Как перебрать массив stdObject? - PullRequest
0 голосов
/ 15 декабря 2011

Как и в Java, когда вы перебираете список, это действительно просто, это похоже на: while(BLAH.hasNext()) { }, так как мне сделать это в PHP, когда у меня есть массив в 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);
    }
    ?>

Ответы [ 3 ]

2 голосов
/ 15 декабря 2011

Вы можете / должны использовать foreach для итерации по каждому элементу массива.

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

0 голосов
/ 15 декабря 2011

Переменная $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",
}
*/
0 голосов
/ 15 декабря 2011

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

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

    $array = (array) $obj;

, теперь вы можете использовать foreach для перебора массива.

  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
    }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...