遍历 PHP 中的 stdClass 对象
Posted
技术标签:
【中文标题】遍历 PHP 中的 stdClass 对象【英文标题】:iterating through a stdClass object in PHP 【发布时间】:2013-04-23 15:48:16 【问题描述】:我有一个这样的对象:
stdClass Object
(
[_count] => 10
[_start] => 0
[_total] => 37
[values] => Array
(
[0] => stdClass Object
(
[_key] => 50180
[group] => stdClass Object
(
[id] => 50180
[name] => CriticalChain
)
)
[1] => stdClass Object
(
[_key] => 2357895
[group] => stdClass Object
(
[id] => 2357895
[name] => Data Modeling
)
)
[2] => stdClass Object
(
[_key] => 1992105
[group] => stdClass Object
(
[id] => 1992105
[name] => SQL Server Users in Israel
)
)
[3] => stdClass Object
(
[_key] => 37988
[group] => stdClass Object
(
[id] => 37988
[name] => CDO/CIO/CTO Leadership Council
)
)
[4] => stdClass Object
(
[_key] => 4024801
[group] => stdClass Object
(
[id] => 4024801
[name] => BiT-HR, BI & IT Placement Agency
)
)
[5] => stdClass Object
(
[_key] => 37845
[group] => stdClass Object
(
[id] => 37845
[name] => Israel Technology Group
)
)
[6] => stdClass Object
(
[_key] => 51464
[group] => stdClass Object
(
[id] => 51464
[name] => Israel DBA's
)
)
[7] => stdClass Object
(
[_key] => 66097
[group] => stdClass Object
(
[id] => 66097
[name] => SQLDBA
)
)
[8] => stdClass Object
(
[_key] => 4462353
[group] => stdClass Object
(
[id] => 4462353
[name] => Israel High-Tech Group
)
)
[9] => stdClass Object
(
[_key] => 4203807
[group] => stdClass Object
(
[id] => 4203807
[name] => Microsoft Team Foundation Server
)
)
)
)
我需要在 html 表中获取 id 和 name,但我似乎很难遍历这个对象。 TIA。我知道我需要到达 Values Array,然后到达 group 对象,但是我在对象和数组之间的转换以及基于 foreach 和基于索引的迭代之间绊倒了。
例如我试过这个:
foreach ($res as $values) print "\n"; print_r ($values);
它遍历对象,但它也让我无用
10 0 37
【问题讨论】:
你会展示你的尝试并解释你的尝试如何不符合你的期望吗? 当然。例如我试过这个: foreach ($res as $values) print "\n"; print_r ($values);它遍历对象,但它也给了我无用的 10 0 37foreach ($object->values as $arr) ....
谢谢@adeneo,这让我更进一步:foreach ($res->values as $values) print "\n"; foreach ($values->group as $groups) 但我被困在这里。 $groups 不是数组。如果我尝试通过索引访问它,我会得到 5C 2D 1S 3C 4B 3I 5I 6S 4I 4M ...
@MorDeror - 发布了一些代码,试试看 =
【参考方案1】:
foreach($res->values as $value)
print_r($value);
【讨论】:
【参考方案2】:echo "<table>"
foreach ($object->values as $arr)
foreach ($arr as $obj)
$id = $obj->group->id;
$name = $obj->group->name;
$html = "<tr>";
$html .= "<td>Name : $name</td>";
$html .= "<td>Id : $id</td>";
$html .= "</tr>";
echo "</table>";
【讨论】:
你去吧,我只是在猜测那里的表格结构,但如果你让它工作,那就是重要的部分。【参考方案3】:function objectToArray( $data )
if ( is_object( $data ) )
$d = get_object_vars( $data );
先将Object转为数组,如:
$results = objectToArray( $results );
并使用
foreach( $results as result )... ...
【讨论】:
return 语句在哪里?【参考方案4】:我知道这是一篇旧帖子,但为了其他人: 使用 stdClass 时,您应该使用 Reflections:
$obj = new ReflectionObject($object);
$propeties = $obj->getProperties();
foreach($properties as $property)
$name = $property->getName(); <-- this is the reflection class
$value = $object->$name; <--- $object is your original $object
here you need to handle the result (store in array etc)
【讨论】:
对我来说就像一个魅力。请注意,此示例使用了一个插值对象属性名称 $object->$name,它是在上面的行中设置的。【参考方案5】:如果您搜索iterate over stdclass
,这是Google 中的最高结果,因此回答标题中的问题可能会有所帮助:
您可以简单地使用 foreach 来迭代一个标准类:
$user = new \stdClass();
$user->flag = 'red';
foreach ($user as $key => $value)
// $key is `flag`
// $value is `red`
【讨论】:
以上是关于遍历 PHP 中的 stdClass 对象的主要内容,如果未能解决你的问题,请参考以下文章
迭代数据时,Laravel 无法将 stdClass 类型的对象用作 Job 的数组 [重复]