就像在迭代列表时在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);
}
?>
答案 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",
}
*/