Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

При обращению к свойству-массиву класса, возвращается только первый элемент, а не весь массив

theadenter Мудрец (11797), на голосовании 1 год назад
Есть класс, в котором есть свойство Row, содержащее данные в виде массива:
 SimpleXMLElement Object 
(
[Row] => Array
(
[0] => SimpleXMLElement Object
(
[@attributes] => Array
(
[AdminNote] => Отрицательный баланс
[AddCash] => 0
[Time] => 2021-12-02T21:00:26.000
[ChangeFlag] => 1
[Balance] => 18.91
)

)

[1] => SimpleXMLElement Object
(
[@attributes] => Array
(
[AdminNote] =>
[AddCash] => -3
[Time] => 2021-12-01T08:32:51.000
[ChangeFlag] => 32
[Balance] => 18.91
)

)

[2] => SimpleXMLElement Object
(
[@attributes] => Array
(
[AdminNote] =>
[AddCash] => 36
[Time] => 2021-12-01T08:31:39.000
[ChangeFlag] => 34
[Balance] => 21.91
)

)
// ...
)
Проблема в том, что когда я делаю
 file_put_contents("log_debug1.log", print_r($log_xml, true)); 
Выходит результат, как выше.
Но когда пытаюсь обратиться к Row напрямую:
 file_put_contents("log_debug2.log", print_r($log_xml->Row, true)); 
Получается:
 SimpleXMLElement Object 
(
[@attributes] => Array
(
[AdminNote] => Отрицательный баланс
[AddCash] => 0
[Time] => 2021-12-02T21:00:26.000
[ChangeFlag] => 1
[Balance] => 18.91
)

)
То есть выходит только один элемент массива - первый.
Куда копать - не понимаю.
Голосование за лучший ответ
EVK IT Сервис К Мыслитель (5226) 1 год назад
 foreach($class as $key => $value) { 
print "$key => $value\n";
}
theadenterМудрец (11797) 1 год назад
Думаю этот вариант сработает, но хотелось бы без ненужных циклов обойтись. А то получается, что я в серверной части использую цикл для записи массива и отправки в клиентскую часть в виде JSON, и в клиентской части также использую цикл для обработки этого же полученного массива.
Мне непонятно, почему я не могу напрямую получить массив Row.
EVK IT Сервис К Мыслитель (5226) theadenter, потому что по факту вся инфа отправляется в виде строки, и тут хочешь или нет, а строку нужно парсировать. JSON самый оптимальный вариант, как по мне. Можешь передать как BLOB или придумать свой формат протокола, но все равно придется кодировать \ декодировать.
Danil Мыслитель (6987) 1 год назад
логично. вы обращаетесь к строке. используйте цикл, чтобы перебрать набор элементов массива
theadenterМудрец (11797) 1 год назад
Да, получилось через цикл. Но пришлось дополнительно приводить параметры в тип string, иначе они записывались в виде части объекта.
 $log []= ["AdminNote" => (string)$row->AdminNote, "AddCash" => (string)$row->AddCash, ...];  
Похожие вопросы