У меня есть строка, содержащая идентификаторы изображений и массив, который имеет для ключей идентификаторы старого изображения и значения для новых идентификаторов изображений.php заменит все записи строк со значениями из массива
Мне нужно найти содержимое для старых и заменить на новые.
Я сделал это
<?php
$string = 'Lorem ipsum dolor sit amet, image="150" consectetur adipisicing elit. Porro voluptatibus omnis nulla quis mollitia dicta quasi voluptatum totam,
labore doloremque ea fugit consectetur, itaque, ab et odio, est iusto recusandae suscipit? Dignissimos veniam recusandae, magnam, dolor omnis, image="6"
eveniet laboriosam quas culpa voluptate at officia in natus repellendus assumenda beatae illo repudiandae earum necessitatibus fugit,
quo error. <span style="padding-top:150px">Esse minima</span>, aut architecto, doloribus quos veritatis reprehenderit.
Temporibus vitae voluptatibus ea ad similique perspiciatis sed doloribus explicabo error asperiores ab, id aspernatur image="235" eum ducimus magni rerum veniam voluptates, ipsum voluptatum repudiandae dolorum quisquam voluptatem.
Doloribus nulla voluptate architecto ipsam sed voluptas, maiores rem sequi eos voluptatum iusto rerum odio sapiente sunt minima, image="65" consequuntur aliquid dolor impedit hic. Beatae perspiciatis, incidunt necessitatibus
voluptas earum cumque, in asperiores id ipsum ducimus veritatis laboriosam eveniet ipsa accusamus! Nulla quasi porro sunt suscipit quibusdam velit
itaque, voluptates, soluta quaerat consectetur eos doloribus, fugiat quisquam. Quos, ad, dolorum.
';
$array = array(
'150' => 4025,
'6' => 4026,
'235' => 4027,
'65' => 4028,
);
preg_match_all('/image=\"(\d+)\"/', $string, $matches_image);
if ('' !== $matches_image[1] && ! empty($matches_image[1])) {
foreach ($matches_image[1] as $key => $matched_image_id) {
if (array_key_exists($matched_image_id, $array)) {
$string = str_replace($matched_image_id, $array[ $matched_image_id ], $string);
}
}
}
Но если вы print_r
$string
вы заметите, что она заменяет каждое вхождение идентификатора (как это должно быть), но также заменить верхний отступы в (например). Поэтому в конце я получаю верхнюю прокладку 4025px, что не очень хорошо: D
Я думал о первой замене сопоставленного массива, который находит весь сопоставленный шаблон (image='150'
) с правильным идентификатором, а затем сопоставляет заменяемые значения в Контент.
Но я застрял.
* но который также заменит верхнее заполнение в span * - невозможно воспроизвести. Я только что проверил ваш код и вывел '' в другом тексте – RomanPerekhrest
@RomanPrekhrest Я протестировал его в http://sandbox.onlinephpfunctions.com/, и он заменил дополнение как хорошо [изображение] (http://imgur.com/a/RIA6a) –