Intereting Posts
Поиск учебника по платежам в PayPal Я использую Ajax, но страница все еще освежает, когда я нажимаю кнопку submit Форма, которая делает переадресацию браузера при доступе посредством обычной формы или запроса Ajax – возможно ли это? Как отличить красноречивые параметры? В чем разница между модификаторами доступа в php? Возвращает переменную в моей модели, если запрос возвращает true Предупреждение: array_key_exists () ожидает, что параметр 2 будет массивом, boolean given Laravel Eloquent – не запускать запрос отношения, если значение столбца равно NULL или 0 htaccess URL rewrite – запрошенный URL не найден на сервере Найти комментарии по-разному в комментариях MySQL Query возвращает пустое поле с AES_ENCRYPT Как удалить нулевые значения из массива? uploadify & PHP – загрузить проблему отмены и обновления страницы PHP добавляет ассоциативный массив с буквальными ключами? Создать файл NACHA с помощью PHP?

Взорвать все возможные комбинации слева направо?

Предположим, что у меня есть строка, например:

$string = 'president barack obama'; 

Теперь предположим, что я хочу взорвать это в массив, сломав слова. Вы думаете, я могу просто использовать explode() , правильно? Это работает, но что, если я хочу массив всех возможных комбинаций слов слева направо? Вот так:

 Array ( [0] => 'barack' [1] => 'barack obama' [2] => 'obama' [3] => 'president' [4] => 'president barack' [5] => 'president barack obama' ) 

Каков наиболее эффективный способ сделать это?


Возможное решение:

До сих пор я придумал одно возможное решение, но я надеюсь, что один из вас может дать мне лучшую идею. Я предполагаю, что это так:

  1. Взрыв нормально.
  2. Перебирайте каждое слово.
  3. Для каждого слова храните его в массиве. Затем проверьте, есть ли в массиве другое слово (после себя). Если есть, добавьте новое значение массива, которое состоит из $current_word . ' ' . $new_word; $current_word . ' ' . $new_word; , Сделайте это для каждого слова.

Теперь это, вероятно, сработает. Однако это кажется раздражающим, и я боюсь, что у кого-то может быть лучший способ сделать это. Что вы все рекомендуете? Есть ли, возможно, функция PHP, которая делает именно это, о котором я не знаю?

Это должно делать то, что вы ищете:

 $string = 'president barack obama won'; $results = getWordPermutaions($string); print_r($results); function getWordPermutaions($inStr) { $outArr = Array(); $tokenArr = explode(" ", $inStr); $pointer = 0; for ($i=0; $i<count($tokenArr); $i++) { $outArr[$pointer] = $tokenArr[$i]; $tokenString = $tokenArr[$i]; $pointer++; for ($j=$i+1; $j<count($tokenArr); $j++) { $tokenString .= " " . $tokenArr[$j]; $outArr[$pointer] = $tokenString; $pointer++; } } return $outArr; } /* $results: Array ( [0] => 'president' [1] => 'president barack' [2] => 'president barack obama' [3] => 'president barack obama won' [4] => 'barack' [5] => 'barack obama' [6] => 'barack obama won' [7] => 'obama' [8] => 'obama won' [9] => 'won' ) */ 

Другое рабочее решение:

  $s = 'president barack obama won'; function myExplode($s) { $ex = explode(" ", $s); $ec = 0; $x = 0; foreach ($ex as $word) { $rs = isset($res) ? sizeof($res) : 0; if ($rs > 0) for ($i=$ec-$x; $i < $rs; $i++) $res[] = "{$res[$i]} {$word}"; $x++; $res[] = $word; $ec = sizeof($res); } return isset($res) ? $res : false; } print_r( myExplode($s) ); 

Вывод

 Array ( [0] => president [1] => president barack [2] => barack [3] => president barack obama [4] => barack obama [5] => obama [6] => president barack obama won [7] => barack obama won [8] => obama won [9] => won )