如何遍历stdObject的数组?

时间:2011-12-14 20:51:48

标签: php class loops

就像在迭代列表时在Java中一样,这很简单,就像:while(BLAH.hasNext()) { },所以当我在stdObject中有一个我希望迭代每个数组的数组时,如何在PHP中执行此操作项目

我不断获得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 个答案:

答案 0 :(得分:2)

您可以/应该使用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-&gt;属性访问它们。

答案 1 :(得分:0)

例如,您有一个像

这样的对象
    $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
    }
  }

答案 2 :(得分:0)

$val变量包含另一个对象(类型为stdClass),其中包含单个“set”的详细信息。如您所见,由于它会生成错误,因此您无法echo 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",
}
*/