У меня есть эта простая строка php
$text = preg_replace("/\\ii(.*?)\\<>/", "<img scr='img/$1'>", $text);
Где я меняю II30.jpgII на <img scr='img/30.jpg'>
, и все работает нормально.
Но что мне нужно, так это проверить, существует ли файл с именем 30.txt, и если да, то напечатать текст под изображением. Я просто не могу понять, как это сделать - может быть, я все равно неправильно использую preg_replace?
Что мне действительно нужно, так это способ изменить \<img>30.jpg\<img>
на <img scr='img/30.jpg'>
, но я не мог понять, как искать \<img>
, поэтому вместо этого я использовал II :-)
А затем вызовите функцию image_text_print("img/30.txt")
, если файл существует, вставьте возврат чуть ниже изображения.
Это не очень хорошо объяснено, но я надеюсь, вы понимаете, что я ищу :-)
Редактировать
Вместо этого, возможно, мне следует как-то поискать в $text xxxxxx, а затем
Но я не могу понять, как искать контент между несколькими и в $text :-/
Йоргенсен
🤔 А знаете ли вы, что...
С PHP можно работать с файлами и директориями на сервере.
Это мое предлагаемое решение, использующее preg_match_all вместо preg_replace или preg_replace_callback. Я сделал несколько предположений: 1) изображения всегда представляют собой цифры, за которыми следует точка jpg, и 2) между изображениями может быть другой текст. Я уверен, что вы можете настроить их по мере необходимости.
//sample text to search and replace on
$text = 'Some other text \<img>30.jpg\<img> something in between \<img>50.jpg\<img> something else \<img>40.jpg\<img>';
//initialize an array to hold the matches
$matches = [];
//this is here to mock up the function you said you needed to call
//this code simply fetches the file contents
function image_text_print($filename)
{
return file_get_contents($filename);
}
//find all matches of \<img>30.jpg\<img> where 30 can be any number made up of 1 or more digits (adjust the regex to your requirements)
if (preg_match_all('#\\\<img>(\d+).jpg\\\<img>#', $text,$matches))
{
//preg_match_all gives us 2 arrays, one with the matched text and one with the image numbers
foreach($matches[0] as $matchInd=>$matchText)
{
//build up the replacement text
$replacement = '<img scr = "img/'.$matches[1][$matchInd].'.jpg">';
//create the filename and then check if it exists
$filename = 'img/'.$matches[1][$matchInd].'.txt';
if (is_file($filename))
{
//if the file exists call your function and append results
$replacement .= image_text_print($filename);
}
//finally replace the matched text
$text = str_replace($matchText,$replacement,$text);
}
}