Задать вопрос
@Aptixx

Из-за чего проблема с использованием циклов while и foreach при составлении файла выгрузки?

Здравствуйте! В php я новичек, необходимо реализовать выгрузку в формате xml из mysql.
Нашел в сети скрипт и доработал под себя, как он работает меня устраивает, но никак не могу разобраться с циклами.

$date = date('c') ;
$xml = '<LISTINGS>
<LISTING GED_VERSION="2" DT_FILE="'.$date.'" ADVFILENAME="file.xml"/>
<ADS>' ;
$ads = '</ADS>
</LISTINGS>' ;

//подключение к базе
          
$q = mysql_query("SELECT bla,

......ЗАПРОС РАБОТАЕТ КОРРЕКТНО, ВЫДАЕТ ТО, ЧТО НУЖНО..............

FROM bla
WHERE bla=bla") ;
$begdate = date('Y-m-d H') ;
$enddate = date('Y-m-d H', strtotime ('+30 days'));

while ($row = mysql_fetch_array($q)) {

$element = $row['id'] ;
$images = $row['images'];
$images = json_decode($images, true);

foreach ($images as $k => $image) {   //ВОТ ЭТОТ ЦИКЛ НУЖНО ПРИМЕНИТЬ
$imagepath = "<FILE FILEPATH=\"http://blabla.ru/$element/"$image['name']"\" />"  ;
}
 
  $xml .= '
<OBJECT>
  <AD ADVNUM="'.$row['id'].'" LOTNUM="A'.$row['id'].'"/> 
  <DT BEGIN="'.$begdate.'" END="'.$enddate.'"/> 
<ADRINF>
  <COUNTRY>Россия</COUNTRY>
			<FILES>
			'.$imagepath.'    //Проблема здесь! Выдает лишь одно название из массива //json, дублирует одно название на несколько строк, в случае, когда в массиве json //несколько значений для $image['name'] 		
      </FILES>
</OBJECT>  ' ; }

$f = fopen('file.xml', 'w');
fwrite($f, $xml.$ads);
fclose($f);


Нужно, чтобы пробегая по каждой строке массива из mysql, декодировалось json полe images, чтобы из этого массива было вытащено name="имя файла", при этом имен может быть несколько, и далее, между тегами FILES проставлялись теги ,соответственно если имен несколько

и т.д.
Помогите, пожалуйста, разобраться.
  • Вопрос задан
  • 2689 просмотров
Подписаться 2 Оценить 1 комментарий
Решения вопроса 1
v1r
@v1r
После объявления переменной
$images = json_decode($images, true);
Объявить переменную
$imagepath = '';
И как в посте выше во время цикла сделать ее перезаписываемой
$imagepath .= "<FILE FILEPATH=\"http://blabla.ru/$element/".$image['name']."\" />";
перед равно добавить точку
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
kirillplatonov
@kirillplatonov
Ruby on Rails developer
$imagepath = "<FILE FILEPATH=\"http://blabla.ru/$element/"$image['name']"\" />"  ;
Каждый раз значение $imagepath перезаписывается. Как вариант можно сделать добавление в конец строки:
$imagepath .= "<FILE FILEPATH=\"http://blabla.ru/$element/"$image['name']"\" />"  ;
Ответ написан
Ваш ответ на вопрос

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

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