Php 遍历对象数组

Php 遍历对象数组,php,arrays,object,Php,Arrays,Object,我使用以下代码创建了一个对象数组: $data = (object)array(); 并用数据填充它。当我完成时,结果应该是这样的: Data-> accounts-> 54-> today-> sales checkout_fees trans_fees payable week-> sales

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

$data = (object)array();
并用数据填充它。当我完成时,结果应该是这样的:

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时失败:

    foreach ($data->accounts as $account) {
        echo ("Working to calculate account for account ".$account."<br>\n");
    }
我知道它有继承权,就像多维数组一样,但每个项都是一个对象。我需要能够获取一个对象的名称,并使用$data->accounts-$variable->week->sales使用该名称和引用数据

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


更新: ($counter=1;$counter<9999;$counter++)的
{
if(isset($data->{$counter})){
echo“账号”。$counter。“有数据。
\n”; } }
实际上,上面的循环为我提供了所有需要的“帐户”。我可以将它们放入一个数组中,用于迭代我的对象并完成我需要的计算,尽管这是一种非常低效的获取列表的方法,但我发现除了直接引用对象的名称之外,没有其他方法引用对象的名称,不幸的是,我的列表是动态创建的。。没有办法提前告诉你

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

谢谢

银虎


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


谢谢。

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

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
无法将其转换为字符串

改用这个:

foreach ($data->accounts as $account) {
    echo ("Working to calculate account for account:");
    var_dump($account);
}

您可能还对将stdClass对象转换为数组感兴趣。我想请您参考以下内容:


您有一个合成对象,因此您需要迭代合成的每个级别,以显示合成中的字符串(如果这是您试图实现的,我并不完全清楚您的问题的目的):

在PHP中:

foreach($data->accounts as $account)
   foreach($account as $period)
       foreach($period as $fee)
           echo $fee, "\n";

如果我没有看错您的评论,您需要访问编号的属性,您可以将它们放在花括号中:

$data->accounts->{54}->week->sales - $data->accounts->{55}->week->transaction_fees

正如您在评论中所写的,您在查找所有数量的帐户时遇到了问题,这些帐户只是
$data->accounts
的对象变量。您可以使用以下函数获取此类列表:

$numbers = get_object_vars($data->accounts);

我希望这有助于您继续深入学习。

这里提供了类的基本语法-没有“对象数组”这样的东西。你有一个目标,句号。对象的所有属性也是吗?
var\u dump
为您提供了什么?
var\u dump
您的对象。然后你就会明白为什么它说“类stdClass的对象”不能被转换。我的目标是获得一个编号帐户ID的列表(即54、55、56),使用每个值作为$account迭代该组值,所以我可以这样做:$weeknetsales=($data->accounts->$account->week->sales->$data->accounts->accounts->week->transaction\u fees)啊..不幸的是,我不知道“数字”将是什么,因为这是用PHP填充的。我试图做一个foreach,这样它会自动抓取它们并使用它们,直到没有更多..所以我的替代方法是获取它们的列表,并使用该列表做一些事情。@Silvertiger:我添加了另一个代码示例我应该给你那个列表。谢谢,我休假了一段时间,但我会看看我是否能实现那个更改,因为它可能会节省数据库查询和时间。谢谢。
foreach($data->accounts as $account)
   foreach($account as $period)
       foreach($period as $fee)
           echo $fee, "\n";
$data->accounts->{54}->week->sales - $data->accounts->{55}->week->transaction_fees
$numbers = get_object_vars($data->accounts);