Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
-3 / 3 / 0
Регистрация: 20.06.2011
Сообщений: 957

Не срабатывает цикл

17.05.2016, 09:06. Показов 1084. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
СПАСИБО БОЛЬШОЕ ОГРОМНОЕ ПОЛУЧИЛОСЬ - а так почему при выполнении цикла

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$file = file('/home/localhost/subdomain/docs/1.xml');
 
$t=0; 
 
echo"<br>";
foreach($file as $v ){
if(preg_match("/<ShortName>(.+?)<\/ShortName>/", $v,$s)){
 
$t= $t+1;
    echo count($v) ."\n";
echo $s[1] ."\n";
 
}
}
 
echo"<br>";
print_r ($t);
в самом индекс файле выводится Вермут Вермут Мартини Бьянко Вермут "Мартини Розато" а в самом файле output когда вставляешь его
в $item -> appendChild( $dom_items->createElement('v8:Description', $v));

выводится &lt;/Entities&gt;
что это хотя в индексе выводятся

Вермут Вермут Мартини Бьянко Вермут "Мартини Розато -- что делать ?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.05.2016, 09:06
Ответы с готовыми решениями:

цикл while (list($key, $val) = each($HTTP_POST_VARS)) не срабатывает ни разу
Есть HTML-страничка с формой (form name='MailForm' method=post). Эта страничка открывается через window.showModalDialog - т.е. в отдельном...

Не срабатывает цикл
Есть такой код nazv_obyav = '' while nazv_obyav != : nazv_obyav = input().split() if...

Не срабатывает цикл FOR
Начал писать программу. Компилятор игнорирует оператор FOR, при этом не каких ошибок не выдаёт. #include &quot;stdafx.h&quot; ...

21
142 / 142 / 63
Регистрация: 18.07.2014
Сообщений: 473
17.05.2016, 09:11
Переменная $v актуальна только внутри цикла
0
-3 / 3 / 0
Регистрация: 20.06.2011
Сообщений: 957
17.05.2016, 09:59  [ТС]
а какой же инициализированной переменной открыть доступ вне цикла -- чтобы вывести на вновь создаваемую xml
0
142 / 142 / 63
Регистрация: 18.07.2014
Сообщений: 473
17.05.2016, 10:36
Я не совсем понимаю что Вам нужно получить, покажите весь код и подробнее скажите что Вам нужно
0
-3 / 3 / 0
Регистрация: 20.06.2011
Сообщений: 957
17.05.2016, 10:39  [ТС]
необходимо чтобы в <v8:Code>РТ-00001</v8:Code>
<v8:Description></v8:Description>
<v8:АлкогольнаяПродукция>true</v8:АлкогольнаяПродукция> в output файле -- между тегами дескриптион прописывался одно из значений массива foreach($file as $v ){
if(preg_match("/<ShortName>(.+?)<\/ShortName>/", $v,$s)){

$t= $t+1;
echo count($v) ."\n";
echo $s[1] ."\n";

} то что находится в индексе -- в самом индексе само создание этого прописывается $item -> appendChild( $dom_items->createElement('v8escription', $v));
0
142 / 142 / 63
Регистрация: 18.07.2014
Сообщений: 473
17.05.2016, 10:52
Покажите исходный файл 1.xml (хотя бы его часть) и то что Вам нужно получить, а также код в котором Вы формируете то что хотите получить (там где $item -> appendChild...)
0
-3 / 3 / 0
Регистрация: 20.06.2011
Сообщений: 957
17.05.2016, 11:04  [ТС]
вот-- а зачем он вам там же в регулярке прописано preg_match("/<ShortName>(.+?)<\/ShortName>/", $v,$s))
Вложения
Тип файла: zip 1.zip (1.1 Кб, 2 просмотров)
0
142 / 142 / 63
Регистрация: 18.07.2014
Сообщений: 473
17.05.2016, 12:03
Ну хорошо, с этим ясно, а что в итоге Вы хотите получить?
0
-3 / 3 / 0
Регистрация: 20.06.2011
Сообщений: 957
17.05.2016, 12:19  [ТС]
хочу чтобы после выполнения участка $item -> appendChild( $dom_items->createElement('vdescription', $v));

выходило в output.xml <v8:Description></v8:Description> между тегами значение

Добавлено через 19 секунд
из предидущего цикла

Добавлено через 9 минут
чтобы выходило название вина одного - и следующих в следующем цикле
0
142 / 142 / 63
Регистрация: 18.07.2014
Сообщений: 473
17.05.2016, 12:50
Ну тогда это $item -> appendChild( $dom_items->createElement('vdescription', $v)); надо делать в цикле, при этом нужно использовать не эту $v переменную а массив результатов поиска а именно $s
А ещё лучше убрать Ваш этот цикл и сделать функцией preg_match_all
Если делать как у Вас сейчас то нужно вот так:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$file = file('/home/localhost/subdomain/docs/1.xml');
 
$t=0; 
 
echo"<br>";
foreach($file as $v ){
if(preg_match("/<ShortName>(.+?)<\/ShortName>/", $v,$s)){
 
$t= $t+1;
    echo count($v) ."\n";
echo $s[1] ."\n";
 
$item -> appendChild($dom_items->createElement('vdescription', $s[1]));
}
}
 
echo"<br>";
print_r ($t);
0
-3 / 3 / 0
Регистрация: 20.06.2011
Сообщений: 957
17.05.2016, 12:54  [ТС]
а если файл 1.xml многопоточный и необходимо сделать выгрузку тоже многопоточную то есть сколько шортнеймов во входящем столько дискриптионов в исхдящем? я думаю $s[1] врятли разрешит данную ситуацию
0
142 / 142 / 63
Регистрация: 18.07.2014
Сообщений: 473
17.05.2016, 13:02
Цитата Сообщение от Dorofej Посмотреть сообщение
врятли разрешит данную ситуацию
Что это значит?
У Вас сейчас же выводит $s[1] вот тут:
PHP/HTML
1
echo $s[1] ."\n";
Я просто добавил Ваш appendChild в нужное место и дал ему правильный параметр

Добавлено через 2 минуты
Ваш цикл как раз и крутит Ваши шортнеймы а результат т.е. содержимое шортнеймов как раз лежит в переменной $s[1], в каждой итерации цикла (на каждом найденном шортнейме) в $s[1] записывается как раз содержимое этого шортнейма, каждый раз новое, так объяснил? )

Добавлено через 2 минуты
И повторюсь: я бы в всё сделал на preg_match_all , так было бы правильнее
0
-3 / 3 / 0
Регистрация: 20.06.2011
Сообщений: 957
17.05.2016, 14:30  [ТС]
а вывести вообще переменную из цикла можно ли
0
142 / 142 / 63
Регистрация: 18.07.2014
Сообщений: 473
17.05.2016, 14:54
Можно, записать её значение в другую (глобальную) переменную, но в Вашем случае это массив, поэтому нужно будет потом обрабатывать её как массив, т.е. всё равно делать ещё один цикл прохода по массиву.
0
-3 / 3 / 0
Регистрация: 20.06.2011
Сообщений: 957
17.05.2016, 15:03  [ТС]
если в индексе уже
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
for ($i = 1; $i <= $t; $i++) {
    $version = $rt.$i;
$item -> setAttribute('xsi:type', 'v8:CatalogRef.'); 
$item = $dom_items -> appendChild( $dom_items->createElement ('v8:CatalogObject.Номенклатура'));
$item -> appendChild( $dom_items->createElement('v8:IsFolder', 'false'));
 
 
$a=$item -> appendChild( $dom_items->createElement('v8:Ref', $ety.'-'.$d2.'-'.$d3.'-'.$d4.'-'.$d5.'-'.$d6));
$a -> setAttribute('xsi:type', 'v8:CatalogRef.'); 
 
$k=$item -> appendChild( $dom_items->createElement('v8:DeletionMark', 'false'));
 
 
$b = $item -> appendChild( $dom_items->createElement('v8:Parent', $ety.'-'.$d2.'-'.$d3.'-'.$d4.'-'.$d5.'-'.$d6));
 
$b -> setAttribute('xmlns:V8Exch',  'http://www.1c.ru/V8/1CV8DtUD/');
$item -> appendChild( $dom_items->createElement('v8:Code', $version));
$item -> appendChild( $dom_items->createElement('v8:Description', $s[1]));
 
$item -> appendChild( $dom_items->createElement ('v8:АлкогольнаяПродукция', 'true'));
$item -> appendChild( $dom_items->createElement('v8:Вес', '0'));
$item -> appendChild( $dom_items->createElement('v8:Весовой', 'false'));
$item -> appendChild( $dom_items->createElement('v8:АлкогольнаяПродукция', 'true'));
$c=$item -> appendChild( $dom_items->createElement('v8:ВидАлкогольнойПродукцииЕГАИС', '00000000-0000-0000-0000-000000000000'));
$c -> setAttribute('xsi:type','v8:CatalogRef.ВидыАлкогольнойПродукцииЕГАИС');
 
//$rating = $movie->addChild('rating', '5');
//$rating->addAttribute('type', 'stars');
 
$d=$item -> appendChild( $dom_items->createElement('v8:ВидНоменклатуры', '00000000-0000-0000-0000-000000000000'));
$d -> setAttribute('xsi:type', 'v8:CatalogRef.ВидыНоменклатуры');
$item -> appendChild( $dom_items->createElement('v8:ДатаОкончанияДействия', '0001-01-01T00:00:00'));
$E=$item -> appendChild( $dom_items->createElement('v8:ДоговорПлатежногоАгента','00000000-0000-0000-0000-000000000000'));
$E -> setAttribute('xsi:type', 'v8:CatalogRef.ДоговорыПлатежныхАгентов');
$u=$item -> appendChild( $dom_items->createElement('v8:ЕдиницаИзмерения', $ety.'-'.$d2.'-'.$d3.'-'.$d4.'-'.$d5.'-'.$d6));
$u -> setAttribute('xsi:type','v8:CatalogRef.БазовыеЕдиницыИзмерения');
$item -> appendChild( $dom_items->createElement('v8:ИмпортнаяАлкогольнаяПродукция', 'false'));
$item -> appendChild( $dom_items->createElement('v8:ИспользоватьСерийныеНомера', 'false'));
$item -> appendChild( $dom_items->createElement('v8:КоличествоПериодовДействия', '0'));
$item -> appendChild( $dom_items->createElement('v8:Крепость', '0'));
$R=$item -> appendChild( $dom_items->createElement('v8:Марка','00000000-0000-0000-0000-000000000000'));
$R -> setAttribute('xsi:type', ( 'v8:CatalogRef.Марка'));
$u = $item -> appendChild( $dom_items->createElement('v8:НаборУпаковок', '00000000-0000-0000-0000-000000000000'));
$u -> setAttribute('xsi:type','v8:CatalogRef.НаборыУпаковок');
$item -> appendChild( $dom_items->createElement('v8:НаименованиеПолное', $s[1]));
$item -> appendChild( $dom_items->createElement('v8:Номинал', '0'));
$item -> appendChild( $dom_items->createElement('v8:ОбъемДАЛ', '0'));
$m = $item -> appendChild( $dom_items->createElement('v8:Производитель', '00000000-0000-0000-0000-000000000000'));
$m -> setAttribute('xsi:type', 'v8:CatalogRef.Контрагенты');
$p=$item -> appendChild( $dom_items->createElement('v8:ПроизводительИмпортерАлкогольнойПродукции', '00000000-0000-0000-0000-000000000000'));
$p -> setAttribute('xsi:type','v8:CatalogRef.Контрагенты');
$item -> appendChild( $dom_items->createElement('v8:СтавкаНДС', 'ндс18'));
$k=$item -> appendChild( $dom_items->createElement('v8:СтранаПроисхождения', '00000000-0000-0000-0000-000000000000'));
$k -> setAttribute('xsi:type', 'v8:CatalogRef.СтраныМира');
$item -> appendChild( $dom_items->createElement('v8:ТипНоменклатуры', 'Товар'));
$w=$item -> appendChild( $dom_items->createElement('v8:ТоварнаяГруппа', $ety.'-'.$d2.'-'.$d3.'-'.$d4.'-'.$d5.'-'.$d6 ));
$w -> setAttribute('xsi:type', 'v8:CatalogRef.ТоварныеГруппы' );
$n=$item -> appendChild( $dom_items->createElement('v8:ТоварнаяКатегория', '00000000-0000-0000-0000-000000000000'));
$n -> setAttribute('xsi:type','v8:CatalogRef.ТоварныеКатегории');
$j=$item -> appendChild( $dom_items->createElement('v8:УдалитьВидАлкогольнойПродукции', 'true'));
$j -> setAttribute('xsi:type', 'v8:CatalogRef.УдалитьВидыАлкогольнойПродукции');
$g=$item -> appendChild( $dom_items->createElement('v8:ФайлКартинки', '00000000-0000-0000-0000-000000000000'));
$g -> setAttribute('xsi:type', 'v8:CatalogRef.НоменклатураПрисоединенныеФайлы');
$l=$item -> appendChild( $dom_items->createElement('v8:ЦеноваяГруппа', '00000000-0000-0000-0000-000000000000'));
$l -> setAttribute('xsi:type', 'v8:CatalogRef.ЦеновыеГруппы');
 
 
 
 
$item = $dom_items -> appendChild( $dom_items->createElement('v8:CatalogObject.Номенклатура')); 
$wet = $item -> appendChild( $dom_items->createElement('v8:IsFolder', 'true'));
$wet -> setAttribute('xmlns:V8Exch', 'http://www.1c.ru/V8/1CV8DtUD/');
$it=$item -> appendChild( $dom_items->createElement('v8:Ref', $ety.'-'.$d2.'-'.$d3.'-'.$d4.'-'.$d5.'-'.$d6));
$it -> appendChild( $dom_items->createElement('v8:DeletionMark', 'false'));
$em=$item -> appendChild( $dom_items->createElement('v8:Parent', '00000000-0000-0000-0000-000000000000'));
$em -> setAttribute('xsi:type', 'v8:CatalogRef.Номенклатура');
$item -> appendChild( $dom_items->createElement('v8:Code', $version));
$item -> appendChild( $dom_items->createElement('v8:Description', $s[1]));
    
$dom_items->formatOutput = true;    
}
есть цикл когда foreach вписывается там незуразица начинается - так что предложите еще вариент

Добавлено через 9 минут
напишите вживую как потому что вариант цикл foreach в котором аппенд чайлд очень не подошел - ттак ак там уже есть цикл -- напишите как это будет выглядить?
0
142 / 142 / 63
Регистрация: 18.07.2014
Сообщений: 473
17.05.2016, 15:05
Тогда так:
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$file = file('/home/localhost/subdomain/docs/1.xml');
 
$t=0;
$s2 = array();
 
echo"<br>";
foreach($file as $v ){
if(preg_match("/<ShortName>(.+?)<\/ShortName>/", $v,$s)){
 
$t= $t+1;
    echo count($v) ."\n";
echo $s[1] ."\n";
 
$s2[] = $s[1];
}
}
 
echo"<br>";
print_r ($t);
А в Вашем цикле for ($i = 1; $i <= $t; $i++) {.... используете так
PHP/HTML
1
$item -> appendChild( $dom_items->createElement('v8escription', $s2));
Добавлено через 1 минуту
т.е. в массив $s2 мы собираем все Ваши $s[1] а потом используем этот массив $s2, это и есть то о чём я говорил
0
-3 / 3 / 0
Регистрация: 20.06.2011
Сообщений: 957
17.05.2016, 15:11  [ТС]
просто цикл в цикле плодит множественное значение - как вы предложил в предидущем варианте -с прег матч аллом -- с глобальной переменной
0
142 / 142 / 63
Регистрация: 18.07.2014
Сообщений: 473
17.05.2016, 15:27
эту строчку
PHP
1
$s2[] = $s[1];
лучше исправить на
PHP
1
$s2[$t] = $s[1];
Добавлено через 15 минут
Вот так сделайте
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$file = file('/home/localhost/subdomain/docs/1.xml');
 
$t=0;
$s2 = array();
 
echo"<br>";
foreach($file as $v ){
if(preg_match("/<ShortName>(.+?)<\/ShortName>/", $v,$s)){
 
$t= $t+1;
    echo count($v) ."\n";
echo $s[1] ."\n";
 
$s2[$t] = $s[1];
}
}
 
echo"<br>";
print_r ($t);
а в appendChild используйте переменную $s2

Да и я там немного неправильно написал, в цикле for ($i = 1; $i <= $t; $i++) {.... нужно использовать так:
PHP
1
$item -> appendChild( $dom_items->createElement('v8escription', $s2[$i]));
т.е. обращаться к элементу массива $s2

c preg_match_all было бы намного проще, первый цикл не нужен был бы, да и Ваш вариант не очень хорош, могут быть баги
0
-3 / 3 / 0
Регистрация: 20.06.2011
Сообщений: 957
17.05.2016, 15:58  [ТС]
то есть прописывать именно $item -> appendChild( $dom_items->createElement('v8escription', $s2)); строчк ли $s2[1] каким то другим образом?

Добавлено через 28 минут
А почему советуете именно preg_match_all --- чем он лучше
0
142 / 142 / 63
Регистрация: 18.07.2014
Сообщений: 473
17.05.2016, 16:25
Вот так $s2[$i] прописывать, а preg_match_all лучше тем что Вам не нужен будет первый цикл, эта функция сама найдёт все значения и поместит их в массив, только там немного другая структура массива. А баги могут возникать такие: у Вас функция file достаёт из файла строки и помещает их в массив, каждая строка это один элемент массива, затем в каждой строке preg_match ищет совпадение с шаблоном, НО после того как он нашёл совпадение он прекращает поиск, т.е. если в файле будет 2 совпадения в одной строке то второе значение не будет захвачено, а preg_match_all достанет все совпадения, мало того даже файл не нужно будет разбивать по строкам в массив, поэтому и цикл ненужен будет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.05.2016, 16:25
Помогаю со студенческими работами здесь

Не срабатывает цикл в массиве
Добрый день. Занимаюсь освоением Java по книге Герберта Шилда. В общем, всё довольно понятно и удобно, но вот с массивами столкнулся с...

Цикл не срабатывает второй раз
Всем привет! Ребята помогите. Использую такой цикл: Dim i1 As Integer = 0 Dim d As Integer Try ...

Цикл срабатывает по нескольку раз
Добрый вечер! Возникла следующая проблема: по некой причине в следующей программе цикл while после проверки условия два раза выполняет тело...

цикл for. не срабатывает параметр (i<arr.lenght)
День добрый. случилась такая проблема: считываю в массив txt(listFile), далее необходимо вывести массив начиная от i. получается...

Цикл срабатывает только один раз -_-
import java.util.Scanner; import java.lang.String; import java.util.regex.*; public class Main { static Scanner in = new...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru