我想使用对象语法-foreach .. $ prop-> val遍历我的对象,但是我得到一个错误,它不是对象。
这是我的对象:
stdClass Object
(
[calls] => Array
(
[0] => stdClass Object
(
[employee_id] => 47
[call_duration] => 10
)
[1] => stdClass Object
(
[employee_id] => 47
[call_duration] => 10
)
[2] => stdClass Object
(
[employee_id] => 47
[call_duration] => 137
)
它是这样创建的:
$all_calls->calls[] = [
'employee_id' => $employee_id,
'call_duration' => $value->duration
];
如何不使用数组语法$ call [“ employee_id”]而是使用$ call-> employee_id来遍历“调用”?
答案 0 :(得分:1)
根据创建调用数组的方式,可以执行此操作以遍历调用并将它们用作对象:
foreach($all_calls->calls as $call) {
$call = (object)$call; // cast the array as an object
$employeeId = $call->employee_id;
}
在第2行,关联数组将转换为具有由键和相应值命名的属性的对象
答案 1 :(得分:1)
因为实际上没有数组对象,但是在执行时却有 key => value 对的数组
$all_calls->calls[] = [
'employee_id' => $employee_id,
'call_duration' => $value->duration
];
您当然不能将成员作为对象访问。
您可以在获取对象时将 key => value 数组强制转换为对象,但这是更正确的选择,尤其是如果您希望整个对象结构看起来像您的示例是从一开始就将 stdClass 的实例而不是 key => value 对数组添加到$calls
数组中。否则,您的对象仍将包含您要使用的 key => value 对数组。
您可以做类似
的操作$c = new stdClass();
$c->employee_id = 10;
$c->call_duration = 60;
$obj->calls[] = $c
但是要使其更紧凑并且不必键入太多,您可以执行类似的操作。
$obj->calls[] = (object)['employee_id' => 10, 'call_duration' => 42];
这将使您的$calls
成员变量包含 stdClass对象的实例,可以通过-> 访问其成员。
通过以json格式存储初始数据并进行类似于{p>的jsondecode
$obj->calls[] = json_decode('{ "employee_id ": 10, "call_duration": 60 }');
但是其他解决方案对我来说更清楚了。
答案 2 :(得分:0)
[已编辑] 我做了你提到的同样的事情,对我来说很好;
检查以下代码。
<?php
$all_calls = new stdClass;
$all_calls->calls = [
(object)['employee_id' => 47, 'call_duration' => 10],
(object)['employee_id' => 47, 'call_duration' => 10],
(object)['employee_id' => 47, 'call_duration' => 137],
];
echo "<pre>";
print_r($all_calls);
foreach($all_calls->calls as $call) {
$employee_id = $call->employee_id;
}