[PHP] Как реализовать деление строки на слова?

T
На сайте с 28.06.2007
Offline
82
2963

Добрый день!

Подскажите пожалуйста как разделить строку на различные варианты 2-ух словных строк?

<?php

$text="текст1 текст2 текст3"; //Слов может быть больше 3 и 15 и 20...
$mas=explode(" ", $text);
?>

Дальше не знаю как сделать. Думал считать количество элементов в массиве count($mas);

Затем через if проверять сколько слов и мешать элементы массивов. Но мне кажется есть вариант попроще или только такой?

Слов может быть больше 3 и 15 и 20...

Результат должен получиться такой:

текст1 текст2

текст2 текст3
текст1 текст3
deepslam
На сайте с 09.05.2006
Offline
204
#1

Может так:


$stroki=array();
foreach ($mas as $key=>$slovo) {
$stroka=$slovo;
foreach ($mas as $key2=>$slovo2) {
if ($key!=$key2)
$stroka.=$slovo." ".$slovo2;
}
$stroki[]=$stroka;
}

Не знаю сработает или нет , не проверял

Удаление вирусов на сайте (http://www.virusonsite.ru) | Scripto CMS - бесплатная система управления сайтом (http://www.scripto-cms.ru) |Профессиональный скрипт каталога ссылок , статей, фирм и объявлений! (http://www.scripto.ru) | Уникальный скрипт для публикации контента (http://publisher.scripto.ru)
T
На сайте с 28.06.2007
Offline
82
#2

<?php

$text="текст1 текст2 текст3"; //Слов может быть больше 3 и 15 и 20...
$mas=explode(" ", $text);
$stroki=array();
foreach ($mas as $key=>$slovo) {
$stroka=$slovo;
foreach ($mas as $key2=>$slovo2) {
if ($key!=$key2)
$stroka.=$slovo." ".$slovo2;
}
$stroki[]=$stroka;
}
print_r ($stroki);
?>

На выходе:

Array ( 

[0] => текст1текст1 текст2текст1 текст3
[1] => текст2текст2 текст1текст2 текст3
[2] => текст3текст3 текст1текст3 текст2
)

Спасибо, но что-то не то :(

deepslam
На сайте с 09.05.2006
Offline
204
#3

Ой , конечно не то , напишите вместо


$stroka.=$slovo." ".$slovo2;

$stroka.=" ".$slovo2;

Должно помочь.

T
На сайте с 28.06.2007
Offline
82
#4

deepslam, на выходе:

Array ( 

[0] => текст1 текст2 текст3
[1] => текст2 текст1 текст3
[2] => текст3 текст1 текст2
)

Вы наверное не правильно задачу поняли, или я плохо написал :(.

Мне надо деление строки на 2-ух словные строки и чтобы они не повторялись (были уникальными).

deepslam
На сайте с 09.05.2006
Offline
204
#5

Ааа, да я не так понял.

Попробуйте так:


foreach ($mas as $key=>$slovo) {
foreach ($mas as $key2=>$slovo2) {
if ($key!=$key2)
$stroki[]=$slovo." ".$slovo2;
}
}
dvaes
На сайте с 03.09.2007
Offline
65
#6

а порядок их следования учитывается? т.е. может быть такое что будет

текст3 текст1

?)

T
На сайте с 28.06.2007
Offline
82
#7

dvaes, без разницы, если будет текст3 текст1 главное чтобы не было текст1 текст3, т.е. чтобы каждая строка была уникальной по содержанию слов в ней.

deepslam, извиняюсь, сразу не увидел ваше сообщение, СПАСИБО работает :)

Правда выдаёт все варианты т.е. текст1 текст2 и текст2 текст1 с этим уже сам разберусь :).

Спасибо за помощь! :)

dvaes
На сайте с 03.09.2007
Offline
65
#8

ну вот допустим можно так


<?php

$text="текст1 текст2 текст3 текст2"; //Слов может быть больше 3 и 15 и 20...
$mas=explode(" ", $text);

$mas = array_unique($mas); //удалить одинаковые слова

for($i=0, $count=count($mas); $i<$count-1; $i++)
for($j=$i+1; $j<$count; $j++)
$arr[] = $mas[$i] . " " . $mas[$j]; //вывод в переменную или сразу echo

echo implode("\r\n", $arr);

?>
T
На сайте с 28.06.2007
Offline
82
#9

dvaes, спасибо огромное, вообще идеал, то что надо!

Re@L
На сайте с 02.11.2008
Offline
175
#10

сорри, уже разобрался

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий