Поиск и замена участка кода в файле.

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО

Помогите новичку в PHP

#1 17 июня 2014 в 12:27
Уважаемые Гуру — подскажите/посоветуйте.

Есть файл, например с таким содержанием:

  1.  
  2. <div class="photobattle-winners">
  3.  
  4. <div class="place place-1">
  5. <?php $photo = array_shift($winners); ?>
  6. <h3><?php echo LANG_PHOTOBATTLE_1_PLACE; ?></h3>
  7. <?php if ($is_show_names) { ?>
  8. <div class="user">
  9. <a href="<?php echo href_to('users', $photo['user_id']); ?>"><?php echo $photo['user_nickname']; ?></a>
  10. </div>
  11. <?php } ?>
  12. <?php echo html_image($photo['image'], 'big'); ?>
  13. </div>
  14.  
  15. <div class="places-2-3">
  16. <div class="place place-2">
  17. <?php $photo = array_shift($winners); ?>
  18. <h3><?php echo LANG_PHOTOBATTLE_2_PLACE; ?></h3>
  19. <?php if ($is_show_names) { ?>
  20. <div class="user">
  21. <a href="<?php echo href_to('users', $photo['user_id']); ?>"><?php echo $photo['user_nickname']; ?></a>
  22. </div>
  23. <?php } ?>
  24. <a class="ajax-modal" href="<?php echo html_image_src($photo['image'], 'big', true); ?>" title="<?php if ($is_show_names) { echo $photo['user_nickname'];} ?>">
  25. <?php echo html_image($photo['image'], 'normal'); ?>
  26. </a>
  27. </div>
  28. <div class="place place-3">
  29. <?php $photo = array_shift($winners); ?>
  30. <h3><?php echo LANG_PHOTOBATTLE_3_PLACE; ?></h3>
  31. <?php if ($is_show_names) { ?>
  32. <div class="user">
  33. <a href="<?php echo href_to('users', $photo['user_id']); ?>"><?php echo $photo['user_nickname']; ?></a>
  34. </div>
  35. <?php } ?>
  36. <a class="ajax-modal" href="<?php echo html_image_src($photo['image'], 'big', true); ?>" title="<?php if ($is_show_names) { echo $photo['user_nickname'];} ?>">
  37. <?php echo html_image($photo['image'], 'normal'); ?>
  38. </a>
  39. </div>
  40.  
  41. </div>
  42. </div>
  43.  
  44. <?php }?>
  45.  
Есть еще пара файлов:

  1.  
  2. <div class="place place-1">
  3. <?php $photo = array_shift($winners); ?>
  4. <h3><?php echo LANG_PHOTOBATTLE_1_PLACE; ?></h3>
  5. <?php if ($is_show_names) { ?>
  6. <div class="user">
  7. <a href="<?php echo href_to('users', $photo['user_id']); ?>"><?php echo $photo['user_nickname']; ?></a>
  8. </div>
  9. <?php } ?>
  10. <?php echo html_image($photo['image'], 'big'); ?>
  11. </div>
  12.  
  1.  
  2. <div class="place place-1">
  3. <h3><?php echo LANG_PHOTOBATTLE_1_PLACE; ?></h3>
  4. </div>
  5.  
  6.  
Подскажите как в PHP найти код файла search.php в коде файла original.php и поменять его на код из файла replace.php?
#2 17 июня 2014 в 12:43
пробовал использовать и htmlentities и htmlentities, а также замена управляющих символов
  1. $search = str_replace("\t","&#009", $search)
, чтобы привести все три файла к одному знаменателю.
Не работает.
Закрадывается мысль что все три файла нужно не просто загнать в свои массивы, а загнать ПОСТРОЧНО, при этом исключить попадания в массив пустых строчек.

И уже потом производить поиск построчно.
#3 17 июня 2014 в 13:31
Скорпион, наверно с массивом у вас не получится, лучше подумать в сторону обработки DOM модели, раз уж идет замена одного блока на другой.
#4 17 июня 2014 в 15:13
snooker, ох… знать бы как в эту сторону думать?😊я в PHP нуб. Только только сел его изучать.
#5 17 июня 2014 в 16:12
Скорпион, тогда может проще програмкой под виндоус?
#6 17 июня 2014 в 16:16
snooker, будете улыбаться но под досом я бы это написал за пять минут.....(есть у меня в заначках подобные скрипты)
а мне нужно именно под php — чтобы использовать в ICMS2
#7 17 июня 2014 в 16:47
Скорпион, а вы можете задачу подробней описать, если не секрет? На лету менять шаблон? Врядли. Может задача лучше решается джаваскриптом, например jquery вообще в пару строк обойдется. Я на телефоне, особо не могу помочь, сам тоже нуб в пхп, но если задача интересная могу вечером изобразить в пхп.
#8 17 июня 2014 в 17:23
snooker, легко :))))
Как говорится — если Магомед не идет к горе — то гора будет ползти к нему :)
ТЫЦ
#9 17 июня 2014 в 18:02
Скорпион, это интересно, неплохая идея. Все что я писал в этой теме вообще не в тему(
#10 17 июня 2014 в 18:05
Если интересно — приглашаю в аську 7966923
#11 17 июня 2014 в 18:07

Все что я писал в этой теме вообще не в тему(

snooker
Ничего страшного — я хоть чуть чуть немного ознакомился с понятием DOM — но мне тоже кажется это не то что мне нужно.
#12 17 июня 2014 в 18:22

раз уж идет замена одного блока на другой.

snooker
Вот где собака зарылась.....
Я к тому что вы меня отправили к DOM.
Наверное не совсем удачный пример — так как основная задача поменять кусочек кода — причем не обязательно он должен быть каким то блоком.
Ну основную цель Вы уже прочитали — поэтому надеюсь стало ясно что к чему.
#13 17 июня 2014 в 18:39
Скорпион, все верно, я подумал о замене блока, тем более уникального. Теперь задумался над действительностью)
У вас правильная мысль закрадывалась — в массив и сравнение построчно, непонятно почему не получилось?
#14 17 июня 2014 в 22:13
snooker, :)))) в элементарном… я не могу сообразить как правильно загнать в масив построчно.
#15 18 июня 2014 в 00:41
Скорпион, ) $array=file("file.php");
Сегодня не добрался до компа, но алгоритм замены не сложный — загоняем все три файла в массивы, находим первое вхождение строки array_search дает номер, в цикле пробегаемся по первому массиву начиная с номера вхождения и сравниваем, можно наслайсать исходный массив и сравнивать array_diff и т.п. вобщем весь букет функций работы с массивами… Если гуру ничего не подскажут, то я могу завтра нарисовать, наверно).
Жду футбола, всем удачи
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.