vechnokrainii
@vechnokrainii
ну почти всегда(

Как поправить функцию?

Здравствуйте, я продолжаю изучить функции, задовал уже подобный вопрос ранее
Почему не работает пользовательская функция?
Столкнулся с тем, что не всегда она подходит.
Решил написать слегка по другому
function wrAr (array($start) = false, array($val)){
      global $xml; // это xmlwriter
  
      if(empty(array_column($val, '1'))) {
          return NULL;
      }
      if (!empty($start)) { 
          foreach($start as $st) {
              return $xml->startElement($st['0']);
          }
      }
      foreach($val as $value) {
          if (empty($value)) {
              continue;
          }
          return $xml->writeElement($value['0'], !$value['2'] ? $value['1'] : $value['2'][$value['1']]);
      }
      $start = array_reverse($start);
      foreach($start as $st) {
          return $xml->endElement();
      }
   
  }

Что я хочу в итоге
допустим в $video какая -то ссылка на видео
wrAr(false,['video', $video]);
wrAr(false,[['video', $video],['video', video1]]);

И получить в XML файле
<videol>https://expamle.com/111111</video>

<videol>https://expamle.com/111111</video>
<videol>https://expamle.com/222222</video>

или
wrAr([videos],[['video', $video],['video', video1]]);
<videos>
<videol>https://expamle.com/111111</video>
<videol>https://expamle.com/222222</video>
</videos>

или если есть какой-то справочник
$book = [ 'red' => 'красный', 'blue' => 'синий'];
$color = 'red';
wrAr(false,['colorist', $color, $book]);

Нужный результат
<colorist>красный</colorist>
Подскажите, что я сделал не так
Проверка не пустое поле или нет перед записью в XML обязательно(
  • Вопрос задан
  • 144 просмотра
Решения вопроса 1
vechnokrainii
@vechnokrainii Автор вопроса
ну почти всегда(
После пары выдернутых мною колочков волос. я разобрался. Теперь только вопрос есть ли способ ее оптимизировать))
function wrAr ($start = false, $val){
      global $xml;
      $data = []; 
      $rv = array_filter($val, 'is_array');
      if (count($rv)==0) {
          $val[] = $val;
      }
      if(empty(array_column($val, '1'))) {
          return NULL;
      }   
      if (!empty($start)) {
          foreach($start as $st) {
              $data[] = $xml->startElement($st);
          }   
      }   
      foreach($val as $value) {
          if (empty($value)) {
              continue;
          }       
          $data[] =  $xml->writeElement($value['0'], !$value['2'] ? $value['1'] : $value['2'][$value['1']]);
      }               
      $start = array_reverse($start);  
      foreach($start as $st) {
          $data[] =  $xml->endElement();
      }
      return $data;
 }
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Spartak-2205
@Spartak-2205
Разработка и создание сайтов
function wrAr (array($start) = false, array($val))

Потому что ошибка в этой строке!

Правильно так
function wrAr ($start = false, $val)

P/S: включите отображение ошибок на экран для отладки скрипта
<?php
ini_set('error_reporting', E_ALL);
ini_set('display_errors', 1);

/*далее ваш код*/
Ответ написан
Ваш ответ на вопрос

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

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