|
|
|
| Есть строка:
"lalala lalala lalala lalala"
Как мне в случайном порядке менять один из пробелов на " bebebe " ?
То есть, в первый раз я хочу получить:
"lalala lalala lalala bebebe lalala"
В другой:
"lalala bebebe lalala lalala lalala"
И так далее. То есть, грубо говоря, чтобы str_replace срабатывал только ОДИН раз и только на энный порядок соответствия. Наподобие: "str_replace, сделай милость, смени ОДИН пробел, который пятый по счёту в этой вот строке..." | |
|
|
|
|
|
|
|
для: Shorr Kan
(09.02.2006 в 18:23)
| | Странная ситуация.
<?PHP
$str = "lalala lalala lalala lalala";
//Разбеваем в массив
$str_ar = explode(" ",$str);
// Мешаем
$str_ar = shuffle($str_ar);
//Изменяем
$str_ar[0] = "bebebe";
//Собираем строку
$str = implode(" ",$str_ar);
print $str_ar;
?>
|
| |
|
|
|
|
|
|
|
для: Artemy
(09.02.2006 в 18:37)
| | Запустил ваш скрипт:
Warning: Cannot use a scalar value as an array in путь_\test.php on line 9
Warning: implode(): Bad arguments. in путь_\test.php on line 11
1
|
видимо где-то ошибка ((
зы: вроде бы нужно было один из пробелов заменить на "bebebe" а не слово... | |
|
|
|
|
|
|
|
для: Shorr Kan
(09.02.2006 в 18:23)
| | Я бы наверное так сделал бы:
<?
$string = "lalala lalala lalala lalala";
$words = explode(" ", $string);
$c = rand(1, count($words)-1);
$new_string = "";
for($i=0;$i<count($words);$i++)
{
if($i==$c)
{
$new_string .= "bebebe ";
}
$new_string .= $words[$i]." ";
}
print "<b>Было</b>: ".$string."<br><b>Стало:</b> ".$new_string;
?>
|
| |
|
|
|
|
|
|
|
для: Shorr Kan
(09.02.2006 в 18:23)
| | наверное можно придумать что-нибудь поеффективнее, но можно сделать так:
с помощью функции explode разбить вашу строку
$exp_mas = explode (" ",$str);
тогда в массиве будут лежать строки lalala. потом посмотреть число елементов массива, сгенерить число меньше кол-ва эл-тов, а затем в цикле заново склеить вашу строку, только перед i-тым элементом (сгерированным числом) вставить ваше bebebe :)
может быть есть решение проще, но я б не парился и быстренько сделал что-нибудь подобное :) цикл, конечно, не лучшее решение, но если строки короткие, то проблем не должно быть...
пока писал уже насоветовали :)) | |
|
|
|
|
|
|
|
для: kasmanaft
(09.02.2006 в 18:46)
| | Да это всё да.. Я, как бы, догадался... Но я предполагал, что есть вариант, наподобие:
<?do_it(" ",$myword,$row,3);?> , где первое вхождение - символ, второе - что получим вместо него, третье - сама строка, а четвертое - номер встреченного символа. Т.е., в моем примере - будет изменен третий пробел.
Проблема вот в чём - если бить строку на массив по пробелам, то при склеивании текст весь перемешается. Совершенно. Мне же нужно...
было:
Hello, good day.
Bye-bye, tomorrow will be good day too.
Стало?
Hello, good ha-ha-ha day.
Bye-bye, tomorrow ha-ha-ha will be good day too. | |
|
|
|
|
|
|
|
для: Shorr Kan
(09.02.2006 в 19:16)
| | что значит перемешается?
хм.. такой и должен остаться...
имеется ввиду, что текст не строка, а строки?
тогда можно перед разбиение преобразовать текст в одну строку и заменить символ \n (перенос строки) на <br> если выводить придется в html..... или же потом опять все вернуть.... | |
|
|
|
|
|
|
|
для: kasmanaft
(09.02.2006 в 20:11)
| | Не так.
Текст:
"Раз, два, три, четыре, пять.
Шесть, семь, восемь, девять, десять."
Поменять на:
"Раз, два, три, хи-хи, четыре, пять.
Шесть, семь, хи-хи, восемь, девять, хи-хи, десять"
Недопустимо:
"Два, восемь, хи-хи, раз, четыре, семь.
Шесть, три, хи-хи, девять, хи-хи, пять, десять" | |
|
|
|
|
|
|
|
для: Shorr Kan
(09.02.2006 в 20:17)
| | Хм.. вроде как мой вариант кода ничего не нарушает...
Вы точно внимательно все смотреле?
У меня мой код вывил:
Было: Раз, два, три, четыре, пять. Шесть, семь, восемь, девять, десять.
Стало: Раз, два, три, четыре, хи-хи, пять. Шесть, семь, восемь, девять, десять.
|
запускал так:
<?
$string = "Раз, два, три, четыре, пять.
Шесть, семь, восемь, девять, десять.";
$words = explode(" ", $string);
$c = rand(1, count($words)-1);
$new_string = "";
for($i=0;$i<count($words);$i++)
{
if($i==$c)
{
$new_string .= "хи-хи, ";
}
$new_string .= $words[$i]." ";
}
print "<b>Было</b>: ".$string."<br><b>Стало:</b> ".$new_string;
?>
|
| |
|
|
|
|
|
|
|
для: Shorr Kan
(09.02.2006 в 20:17)
| | Вот так можно попробовать
<?
$str = 'раз, два, три, четыре.'
$arr=explode(" ",$str);
$pos=rand(1,sizeof($arr));
array_splice($arr,$pos,0,'bebebe ');
echo implode(" ",$arr);
?>
|
| |
|
|
|
|
|
|
|
для: Axxil
(09.02.2006 в 21:13)
| | Да, JIEXA , вы правы. За наличием этой правоты - не могу пока проверить правоту Axxil - весь монитор занят...
Спасибо JIEXA , Axxil и господа, которые отвечали выше (имена запомнить не могу пока).
===============
Ага, похоже вариант Axxil не подходит по причине смены энного количества элементов, но не в случайных местах...
JIEXA, а ваш работает очень медленно ввиду того, что весь этот процесс мне надо сделать во внешнем цикле (т.е., неоднократно), плюс у него есть... ээ... минус. Он в полне может два "хи-хи, " расположить рядом.
Обидно. | |
|
|
|
|
|
|
|
для: Shorr Kan
(09.02.2006 в 23:43)
| | А нет ли функции, которая смещает некоторые элементы? Скажем:
$arr[0];
$arr[1];
$arr[2];
$arr[3];
$arr[4];
$arr[5];
И вот их превратить в
$arr[0];
$arr[1];
$arr[3];
$arr[4];
$arr[5];
$arr[6];
...не меняя местами. | |
|
|
|
|
|
|
|
для: Shorr Kan
(09.02.2006 в 23:43)
| | Попробуйте такой вариант....
<?
$str = 'раз два три четыре';
$arr=explode(" ",$str);
$pos=rand(0,sizeof($arr));
$arr[$pos]='bebebe';
echo implode(" ",$arr);
?>
|
Он заменяет слово на bebebe в случайной позиции.
А если нужно чтоб слово втискивалось между строк, то идеальный вариант Axxil.
Если в строке
$pos=rand(0,sizeof($arr));
|
Стоит 0, то позиция может быть от первого до последнего.
Если 1, то от второго до последнего. (при данном варианте, со строкой в четыре слова - позиции могут повторяться подряд несколько раз.) | |
|
|
|
|
|
|
|
для: Shorr Kan
(09.02.2006 в 23:43)
| | Как это не в случайных?
bebe может появится после любого слова. За это отвечает rand() | |
|
|
|
|
|
|
|
для: Axxil
(10.02.2006 в 09:15)
| | Угу. Еле вник в array_splice... спасибо. | |
|
|
|
|