Задать вопрос
@f_u_s_s
Любопытный кодер

Возможно ли строить массив по условиям?

Составляю XML-файл, использую FluidXml и столкнулся с такой проблемой:

в зависимости от условий требуется вывести несколько дополнительных узлов/параметров в теле XML, но не могу сообразить, как это сделать.

Сейчас имею такой код:
$query = AnpProperties::where('published', '>', '0')->get();
    
        $xml = new FluidXml(null, ['encoding'   => 'UTF-8' ]);

        $xml->addChild('MassUploadRequest', true, ['xmlns' => 'http://assis.ru/ws/api', 'timestamp' => time()]);

        foreach($query as $object){
            $object_xml = $xml->addChild([
                'object' => [
                    '@externalId' => $object->id,
                    '@publish'  => 'true',
                    'request' => [
                        '@xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
                        'common' => [
                            '@name' => $object->title,
                            '@description' => $object->description,
                            'address' => [
                                'coordinates' => [
                                    '@lat' => $object->latitude,
                                    '@lon' => $object->longitude
                                ]
                            ]
                        ]
                    ],
                ]
            ]);
        }


Но если, условно, $object->id = 777, то мне нужно в узел "common" добавить еще несколько атрибутов, т.е. код common должен получиться в этом случае примерно такой :

...
                        'common' => [
                            '@name' => $object->title,
                            '@description' => $object->description,
//вот сюда вставить
                            '@param_1' => 'value_1',
                            '@param_2' => 'value_2',
//а дальше оставить как есть
                            'address' => [
                                'coordinates' => [
                                    '@lat' => $object->latitude,
                                    '@lon' => $object->longitude
                                ]
                            ]
                        ]
...


Т.к. построение идет в цикле, то хотелось бы каким-то образом использовать условие прямо при описании массива. Пробовал через оператор "?:" - безуспешно:
...
                        'common' => [
                            '@name' => $object->title,
                            '@description' => $object->description,
                            $object->id == 777 ? [
                                '@param_1' => 'value_1',
                                '@param_2' => 'value_2',
                            ] : null, 
                            'address' => [
                                'coordinates' => [
                                    '@lat' => $object->latitude,
                                    '@lon' => $object->longitude
                                ]
                            ]
                        ]
...


Может есть рабочий вариант? или это в принципе невозможно? Спасибо.
  • Вопрос задан
  • 55 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
Stalker_RED
@Stalker_RED
прямо при описании массива.
Неа.

Но можно так:
if ($object->id = 777) {
  $foo['common']['@param_1'] = 'value_1',
  $foo['common']['@param_2'] = 'value_2',
}
Ответ написан
Комментировать
VladimirAndreev
@VladimirAndreev
php web dev
$data = Array_merge($data, ($id== 100500 ? $['a'=>'b'][]))

Но я бы не советовал это делать
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы