首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >遍历对象数组

遍历对象数组
EN

Stack Overflow用户
提问于 2011-09-25 08:41:24
回答 1查看 934关注 0票数 0

我已经用以下代码创建了一个对象数组:

代码语言:javascript
复制
$data = (object)array();

然后用数据填充它。当我完成的时候,结果应该是这样的:

代码语言:javascript
复制
Data->  accounts->  54->    today-> sales
                    checkout_fees
                    trans_fees
                    payable
                week->  sales
                    checkout_fees
                    trans_fees
                    payable
                month-> sales
                    checkout_fees
                    trans_fees
                    payable
                year->  sales
                    checkout_fees
                    trans_fees
                    payable
            55->    today-> sales
                    checkout_fees
                    trans_fees
                    payable
                week->  sales
                    checkout_fees
                    trans_fees
                    payable
                month-> sales
                    checkout_fees
                    trans_fees
                    payable
                year->  sales
                    checkout_fees
                    trans_fees
                    payable

当我试图对树中的一个元素执行foreach时,它失败了:

代码语言:javascript
复制
    foreach ($data->accounts as $account) {
        echo ("Working to calculate account for account ".$account."<br>\n");
    }

我得到的错误是:

可捕获的致命错误:无法将类stdClass的对象转换为字符串

我认为这是因为我试图回显一个数组,而不是实际的“帐户”名称。是否有办法获取这个帐户名或它的子(即55),并将其设置为一个变量?我将需要相同的变量来迭代并对它下的数组中的数据执行计算,这样可以帮助实现两倍的效果。

谢谢,

银虎

更新:***************************

我的目标是:

代码语言:javascript
复制
object(stdClass)#11 (4) { 
    ["56"]=> object(stdClass)#12 (3) { 
        ["week"]=> object(stdClass)#13 (4) { 
            ["sales"]=> float(6) 
            ["checkout_fees"]=> float(0) 
            ["trans_fees"]=> float(0.67) } 
        ["month"]=> object(stdClass)#21 (4) { 
            ["sales"]=> float(6) 
            ["checkout_fees"]=> float(0) 
            ["trans_fees"]=> float(0.67) } 
        ["year"]=> object(stdClass)#27 (4) { 
            ["sales"]=> float(6) 
            ["checkout_fees"]=> float(0) 
            ["trans_fees"]=> float(0.67) } } 
    ["55"]=> object(stdClass)#15 (3) { 
        ["week"]=> object(stdClass)#16 (4) { 
            ["sales"]=> float(24) 
            ["checkout_fees"]=> float(0) 
            ["trans_fees"]=> float(0.67) } 
        ["month"]=> object(stdClass)#23 (5) { 
            ["sales"]=> float(24) 
            ["checkout_fees"]=> float(0) 
            ["trans_fees"]=> float(0.67) 
            ["payable"]=> string(5) "14.00" } 
        ["year"]=> object(stdClass)#29 (5) { 
            ["sales"]=> float(24) 
            ["checkout_fees"]=> float(0) 
            ["trans_fees"]=> float(2.68) 
            ["payable"]=> string(5) "14.00" } } 
    ["54"]=> object(stdClass)#18 (3) { 
        ["week"]=> object(stdClass)#19 (4) { 
            ["sales"]=> float(4) 
            ["checkout_fees"]=> float(0) 
            ["trans_fees"]=> float(0.67) } 
        ["month"]=> object(stdClass)#25 (4) { 
            ["sales"]=> float(4) 
            ["checkout_fees"]=> float(0) 
            ["trans_fees"]=> float(0.67) } 
        ["year"]=> object(stdClass)#31 (4) { 
            ["sales"]=> float(4) 
            ["checkout_fees"]=> float(0) 
            ["trans_fees"]=> float(0.67) } } 
    ["45"]=> object(stdClass)#33 (3) { 
        ["week"]=> object(stdClass)#34 (1) { 
            ["payable"]=> string(5) "15.00" } 
        ["month"]=> object(stdClass)#35 (1) { 
            ["payable"]=> string(5) "15.00" } 
        ["year"]=> object(stdClass)#36 (1) { 
            ["payable"]=> string(5) "15.00" 
            } 
        } 
    }
 } 

我知道它有一个继承结构,就像多维数组一样,但是每个项目都是一个对象。我需要要么获取对象的名称并使用该名称,然后使用$ data ->accounts$variable->week->sales来引用数据。

我还将研究如何将一个对象转换为一个数组来处理它,我只是在寻找最好的解决方案。

更新:

代码语言:javascript
复制
for ($counter=1; $counter < 9999; $counter++) {
    if (isset($data->{$counter})) {
        echo "Account number ".$counter." has data.<br>\n";
    }
}

实际上,上面的循环给了我所有需要的“帐户”。我可以将它们插入数组中,用于通过对象进行迭代,并完成所需的计算,尽管这是一种非常低效的获取列表的方法,除了直接引用对象名称之外,我找不到其他方法来引用它。不幸的是,我的列表是动态创建的。没办法事先说出来。

有没有人知道更好的方法来获取对象的第二层的帐户ID列表?

谢谢,

银虎

更新:

最后,我只是查询我的数据库,看看哪些帐户在“销售”侧和“应付款”方都处于活动状态,并且它返回了创建对象时的相同列表(45、54、55、56)。我现在使用这个结果来处理所需的数据。

不过还是谢谢你。

EN

回答 1

Stack Overflow用户

发布于 2011-09-25 08:47:39

您的$account变量本身就是一个对象,例如:

代码语言:javascript
复制
54->        today-> sales
                checkout_fees
                trans_fees
                payable
            week->  sales
                checkout_fees
                trans_fees
                payable
            month-> sales
                checkout_fees
                trans_fees
                payable
            year->  sales
                checkout_fees
                trans_fees
                payable

这不能转换为字符串。

用这个代替:

代码语言:javascript
复制
foreach ($data->accounts as $account) {
    echo ("Working to calculate account for account:");
    var_dump($account);
}

您也可能对将stdClass对象转换为数组感兴趣。我建议你注意这一点:

http://www.if-not-true-then-false.com/2009/php-tip-convert-stdclass-object-to-multidimensional-array-and-convert-multidimensional-array-to-stdclass-object/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7544501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档