пятница, 12 июня 2015 г.

Вставка любого символа в строку (с заменой и без) на PHP

Вставка любого символа в строку (с заменой и без) на PHP
Не самая сложная задачка для программистов, однако у новичков, таких как я, она может отнять намного больше времени, чем кажется на первый взгляд. Хотя у меня время отняла не столько задача вставить символ в строку на PHP, сколько прикручивание ее к своему маленькому скрипту (если его можно так назвать). Ну, обо всем по порядку, сначала о вставке и замене, а затем о моему скриптику, который подойдет для тех, кто автоматизирует заработок на рекламе в Твиттере.
Вставку символа в строку я сделал так:
$newTxt = 'Здесь необходимая строка, которая может состоять из очень большого количества символов';
substr_replace($newTxt, '!', 10, 0); //После 10-о символа (параметр) вставляем !, который не замещает ни одного символа (параметр 0)

Плюсовое значение второго параметра означает какое количество символов нужно заменить. Минусовое ведет отсчет от конца строки, в результате замещается все в середине между 10 символом и, например, 10 с конца. Первый параметр (там, где 10) тоже может быть минусовым, тогда отсчет тоже ведется от конца строки.

В принципе обо всем этом можно узнать с оф сайта PHP, но я написал для того, чтобы рассказать о своем маленьком скриптике, который стал для меня в некотором роде достижением.

В общем, в Твиттере я уже давно пишу твиты автоматом, насобирал целую кучу цитат и высказываний, но все они не делают для поисковиков мои площадки уникальными, поэтому в один момент пришла мысль брать тексты из каких-то книг. Вот тут-то и возникла небольшая проблема. Тексты в книгах написаны длинными абзацами, который в текстовых документах занимают 1 строку. То есть, 5-10 и больше предложений в одну строку, а как известно программы для автоматизации берут лишь 140 символов из одной строки, а все остальное удаляют, и это все не прикольно. Поэтому появилась задачка, разбивать длинные тексты на твиты длинной 140 символов, а что это сделает лучше за легкий скрипт на PHP, правильно ничего, подумал я и принялся за работу.

Получилось, что-то в таком роде:
$newTxt = $_POST['txt'];
$symbol = strlen($newTxt); //Подсчет количества символов
$count = $symbol / 140; // Количество итераций для определения количества твитов
$b = 139;

while ($i <= $count):
 $newTxt = substr_replace($newTxt, '
', $b, 0); //После 140-о символа (параметр $b) вставляем перенос строки, который не замещает ни одного символа (параметр 0)
 $i++;
 $b = $b++; // Увеличиваем $b на 1, с учетом вставленного переноса строки
 $b = $b + 139; 
endwhile;
 echo $newTxt; // Вывод результата

И форма для текста, который нужно обработать:

Получилось, что-то такое:
Для примера взял текст из новости, на скрине ниже видно, что в текстовом редакторе весь текст в одну строку:
После того, как текст обработал скрипт, получило вот так:

Вот такие дела, конечно, не прикольно, что некоторые слова оборвались и новые предложения начинаются с непонятных слов, но это все можно исправить, позже я этим займусь (может на выходных время появиться), но это в несколько раз ускорило работу с созданием новых твитов. Да, кто-то скажет, зачем в Твиттере писать такую ересь? Отвечу так, для меня главное определенное количество твитов в день, возможность быстро прикрыть рекламу и приступить к написанию новой, и уникальность. В общем мне нравиться, и возможно это еще кому-то пригодится.

UPD 14.06.2015:
Все таки решение моей задачки оказалось намного проще, сегодня заглянул в мануал PHP и нашел необходимую функцию, которая делает все тоже, что я делал с помощью цикла и вычислений. При чем, делает это не обрывая слов, то есть при подсчете количества символов, если последний приходится не на пробел, то строка обрывается на ближайшем пробеле, который попадает в заданное количество символов. Функция эта wordwrap(). И теперь мой код PHP выглядит вот так:

$newTxt = $_POST['txt'];
$b = 139;
$newTxt = wordwrap(strip_tags($newTxt), $b, "
\n"); // strip_tags() удаляет html и php теги, а также все NULL-байты echo $newTxt; // Вывод результата
То, что доктор прописал! Теперь думаю попробовать сделать из него, что более серьезное, чем просто разделение строки, которое как оказалось так просто делается.

Комментариев нет:

Отправить комментарий