Я создал массив объектов со следующим кодом:
$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");
}
ошибка, которую яget is this:
Исправляемая фатальная ошибка: объект класса stdClass не может быть преобразован в строку
Я предполагаю, что это потому, что я пытаюсь отобразить массив вместо фактического имени "account",Есть ли способ получить это имя учетной записи или его суб (то есть 55) и установить его в переменную?Мне понадобится та же самая переменная для итерации и выполнения вычислений для данных в массиве под ней, так что это поможет в два раза.
Спасибо,
Серебряный тигр
ОБНОВЛЕНИЕ: ***************************
Вот мой объект:
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.
Я также посмотрю на преобразование объекта в массив для работы с ним, я просто искал лучшее решение.
ОБНОВЛЕНИЕ:
for ($counter=1; $counter < 9999; $counter++) {
if (isset($data->{$counter})) {
echo "Account number ".$counter." has data.<br>\n";
}
}
Эффективно, цикл выше дает мне все «счета», которые нужны.Я мог бы засунуть их в массив, чтобы использовать для итерации по моим объектам и завершить необходимые мне вычисления, хотя это ужасно неэффективный способ получить список. Я не нашел способа ссылаться на имя объекта, кроме как непосредственно ссылаться на него ик сожалению, мой список создается динамически ... заранее сказать невозможно.
Кто-нибудь знает лучший способ получить список идентификаторов учетных записей на 2-м уровне объекта?
Спасибо,
Серебряный тигр
ОБНОВЛЕНИЕ:
В итоге я просто запросил свою базу данных, чтобы узнать, какие учетные записи были активны как на стороне «продажи», так и на «подлежащей оплате»сторона и вернул тот же список учетных записей (45, 54, 55, 56), который присутствовал при создании объекта на первом месте.Сейчас я использую этот результат для обработки данных по мере необходимости.
Спасибо.