Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Заменить каждый 20тый пробел на слово
Форумы портала PHP.SU » PHP » Напишите за меня, пожалуйста » Заменить каждый 20тый пробел на слово

Страниц (1): [1]
 

1. alexko64 - 19 Апреля, 2019 - 00:45:20 - перейти к сообщению
Доброй ночи
Вот такая конструкциа заменяет каждый пробел на ключевое слово
$final_text = str_replace (" ", " $keyword", $text);

А как заменить каждый 20тый, 40вой, 60тый и так далле пробел на $keyword?
Тоисть через каждые 20 пробелов
2. Vladimir Kheifets - 19 Апреля, 2019 - 08:09:19 - перейти к сообщению
alexko64 пишет:
Доброй ночи
Вот такая конструкциа заменяет каждый пробел на ключевое слово
$final_text = str_replace (" ", " $keyword", $text);

А как заменить каждый 20тый, 40вой, 60тый и так далле пробел на $keyword?
Тоисть через каждые 20 пробелов


Добрый день!
Написал функцию SpecialStrReplace
Спойлер (Отобразить)

Удачи!
3. Строитель - 19 Апреля, 2019 - 10:48:08 - перейти к сообщению
Vladimir Kheifets, ох и вéлик же у вас! Радость
(Добавление)
alexko64, тут на помощь придут регулярные выражения:
PHP:
скопировать код в буфер обмена
  1. $text = '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 40 41 42';
  2. $keyword = 'keyword';
  3.  
  4. $text = preg_replace('~(?:\S+\s){20}\K~', "$keyword ", $text);
  5. echo $text;
  6. /* Результат:
  7. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 keyword 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 40 41 keyword 42
  8. */

Демо
4. LIME - 19 Апреля, 2019 - 13:47:45 - перейти к сообщению
Строитель Здорово
5. alexko64 - 19 Апреля, 2019 - 13:55:39 - перейти к сообщению
[quote=Строитель][/quote]
Отлично, то что надо. Спасибо
6. Vladimir Kheifets - 19 Апреля, 2019 - 14:23:53 - перейти к сообщению
Строитель пишет:
Vladimir Kheifets, ох и велик же у вас!

Ваше решение лучше!
Но для случая, когда в строке только пробелы(это возможно), как в моём примере, Ваше решение не работает.
Кроме того в моём примере предусмотрен массив $keywords для замены.
Проверил, что произойдёт если немного изменить тестовую строку:
Цитата:

Ваша тестовая строка:
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 40 41 42
Результ:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 keyword 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 40 41 keyword 42

После 17 добавил табуляцию:
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 40 41 42
Результ:
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 keyword 38 40 41 42
7. Строитель - 19 Апреля, 2019 - 14:49:54 - перейти к сообщению

LIME Закатив глазки
8. alexko64 - 14 Мая, 2019 - 21:19:22 - перейти к сообщению
Строитель пишет:
Vladimir Kheifets, ох и вéлик же у вас! Радость
(Добавление)
alexko64, тут на помощь придут регулярные выражения:
PHP:
скопировать код в буфер обмена
  1. $text = '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 40 41 42';
  2. $keyword = 'keyword';
  3.  
  4. $text = preg_replace('~(?:\S+\s){20}\K~', "$keyword ", $text);
  5. echo $text;
  6. /* Результат:
  7. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 keyword 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 40 41 keyword 42
  8. */

Демо

Этот вариант работает отлично. Хочу попросить ещё разок подсобит .
Что изменить что-бы слово в текст вставлялось не через каждые 20 пробелов на протяжении всего текста, а только один раз через первые 20 пробелов?
Спасибо и сорри что пристал с вопросами
9. Строитель - 14 Мая, 2019 - 21:54:43 - перейти к сообщению
alexko64, добавьте через запятую в preg_replace() ещё один аргумент 1 (единицу).
10. Строитель - 15 Мая, 2019 - 08:20:41 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. $text = '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 40 41 42';
  2. $keyword = 'keyword';
  3.  
  4. $text = preg_replace('~(?:\S+(\s)){20}\K~', "$keyword\$1", $text, 1);
  5. echo $text;
11. alexko64 - 15 Мая, 2019 - 13:46:17 - перейти к сообщению
Спасибо огромное

 

Powered by ExBB FM 1.0 RC1