Задать вопрос
nokla
@nokla

Как вытащить из переменной $result, те слова которые нужны?

Доброе время суток.
Переду сразу к сути, есть код
$array = preg_split('-([\W])-u', $text, -1, PREG_SPLIT_NO_EMPTY); // $text - здесь текст "1 2 3 4 5 6"
        $result = array();
        $length = count($array);
        for ($i = 0; $i+1 <= $length; $i++) {
            $result[] = $array[$i];
            $_result = array($array[$i]);
            for ($j = $i+1; $j < $length; $j++) {
                $_result[] = $array[$j];
                $result[] = implode(' ', $_result);
            }
        }
        var_dump($result);

Здесь нарисовано что получается и что нужно сделать рисунок
Я старался как можно точно нарисовать то что нужно. Вот например возьмем голубую полоску где нарисован вывод. Как вы видите она соединяет string(1) "1" и string(9) "2 3 4 5 6" и выдает вывод 1 2 3 4 5 6 смысл в том, чтобы код перебирал все комбинации, например если нету голубой полоски следующая комбинация может быть желтой или зеленой, но вывести он должен одну комбинацию.
сейчас код выводит все комбинации.
1 2 3 4 5 6

array(21) {
  [0]=>
  string(1) "1"
  [1]=>
  string(3) "1 2"
  [2]=>
  string(5) "1 2 3"
  [3]=>
  string(7) "1 2 3 4"
  [4]=>
  string(9) "1 2 3 4 5"
  [5]=>
  string(11) "1 2 3 4 5 6"
  [6]=>
  string(1) "2"
  [7]=>
  string(3) "2 3"
  [8]=>
  string(5) "2 3 4"
  [9]=>
  string(7) "2 3 4 5"
  [10]=>
  string(9) "2 3 4 5 6"
  [11]=>
  string(1) "3"
  [12]=>
  string(3) "3 4"
  [13]=>
  string(5) "3 4 5"
  [14]=>
  string(7) "3 4 5 6"
  [15]=>
  string(1) "4"
  [16]=>
  string(3) "4 5"
  [17]=>
  string(5) "4 5 6"
  [18]=>
  string(1) "5"
  [19]=>
  string(3) "5 6"
  [20]=>
  string(1) "6"
}

P.S. Если что то не понятно не бойтесь, спрашивайте.
  • Вопрос задан
  • 2459 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
@Angelina_Jo
Наверное, проще взломать базы данных пентагона, чем понять эти схемы. :) Вот есть строка '1 2 3 4 5 6', а что требуется? :)

UPD 1

Ну вот я попробовала по-своему повторить функционал вашего скрипта.

$text = 'это такая жопа что просто офигеть';

$array = preg_split('-([\W])-u', $text, -1, PREG_SPLIT_NO_EMPTY);

$result = array();
$length = count($array);

$i = 0;
$f = 0;
do {
$str = '';


do {
$str .= ' '.$array[$f];
$result[] = trim($str);
$f++;
}
while($f < $length);


$i++;
$f = $i;
}
while($i < $length);


Но никак не могу понять, что и зачем нужно собрать. :))) По-моему, не хватает условий. Если мы создаём элементы перебора, то чего там может не быть? Как может не быть "голубой полоски", если она является частью данного набора для перебора? :) Вот вы узнали варианты перебора (не все, конечно, но так, наверное, и задумано; я про то, что нет же вариантов "2 1 3" и т.п.), и эти варианты нужно где-то применить, наверное? Не понимаю. :)

UPD 2

Ну если так, то нужно же разрабатывать алгоритмы. По-моему, логичнее пробовать перевести всю фразу целиком, затем без одного слова, потом ещё без одного и т.д. После этого - начинать отнимать слова с другой стороны. В общем, типа так:

Array
(
    [0] => Array
        (
            [0] => это такая жопа что просто офигеть
            [1] => это такая жопа что просто
            [2] => это такая жопа что
            [3] => это такая жопа
            [4] => это такая
            [5] => это
        )

    [1] => Array
        (
            [0] => такая жопа что просто офигеть
            [1] => такая жопа что просто
            [2] => такая жопа что
            [3] => такая жопа
            [4] => такая
        )

    [2] => Array
        (
            [0] => жопа что просто офигеть
            [1] => жопа что просто
            [2] => жопа что
            [3] => жопа
        )

    [3] => Array
        (
            [0] => что просто офигеть
            [1] => что просто
            [2] => что
        )

    [4] => Array
        (
            [0] => просто офигеть
            [1] => просто
        )

    [5] => Array
        (
            [0] => офигеть
        )

)
Ответ написан
kompi
@kompi
nullstack devoops
Это вопрос, в первую очередь, к математике - от алгоритма к коду, а не наборот, через код к алгоритму.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы