Intereting Posts
file_get_contents () возвращает «не удалось открыть поток» при нажатии HTTPS Не удается создать файлы Heroku Cedar-14 Извлечь DOM-элементы из строки, в PHP cURL с использованием нескольких прокси-серверов в цепочке почему UNSET и NULL работают по-разному Хорошая идея / плохая идея? Использование MySQL RAND () вне небольшого набора результатов подзапроса? Подождите, пока socket_write завершится, прежде чем писать снова. Количество эхо-записей MySQL, которое имеет одинаковый идентификатор сеанса Сохранять переменную, используя сеансы Как я могу увеличить размер шрифта codeigniter captcha helper Сократите URL, удалив пустые переменные GET и упростив имена переменных Не удается получить страну пользователя по php Функция даты в PHP Не работает должным образом Почему так медленно вызывается функция (например, strlen, count и т. Д.) По ссылочному значению? PHP CURL ничего не возвращает

Взорвать все остальные слова

Допустим, у меня есть строка:

$string = "This is my test case for an example." 

Если я взорвусь на основе «Я получаю

 Array('This','is','my','test','case','for','an','example.'); 

Я хочу, чтобы взорвался для любого другого пространства:

 Array('This is','my test','case for','an example.'). 

Строка может содержать нечетное число слов, поэтому последний элемент в массиве может не содержать двух слов.

Кто-нибудь знает, как это сделать?

Я просмотрел результаты и объединил строки после факта.

 $matches = array(); preg_match_all('/([A-Za-z0-9\.]+(?: [A-Za-z0-9\.]+)?)/', 'This is my test case for an example.',$matches); print_r($matches); 

выходы:

 Array ( [0] => Array ( [0] => This is [1] => my test [2] => case for [3] => an example. ) [1] => Array ( [0] => This is [1] => my test [2] => case for [3] => an example. ) ) 

обновление фиксировало его в соответствии с одним словом в конце предложения

Функция, которая может использоваться для разных разделителей и чисел.

 function explodeEveryNth($delimiter, $string, $n) { $arr = explode($delimiter, $string); $arr2 = array_chunk($arr, $n); $out = array(); for ($i = 0, $t = count($arr2); $i < $t; $i++) { $out[] = implode($delimiter, $arr2[$i]); } return $out; } 

Тестовый код

 var_dump(explodeEveryNth(' ', 'This is a test string', 2)); 

 $string = "This is my test case for an example."; preg_match_all("/[a-zA-Z0-9]+\ [a-zA-Z0-9]+/", $string, $matches); print_r($matches); 

 $matches = array(); preg_match_all('/\S+(?:\s[A-Za-z0-9.]+|$)/', 'This is my test case for an example.', $matches ); print_r($matches); preg_match_all('/\S+(?:\s[A-Za-z0-9.]+|$)/', 'This is my test case for example.', $matches ); print_r($matches); 

Что-то, что вы можете использовать для других сценариев: (всегда лучше ИМО).

Хотя, возможно, это не самое элегантное решение, это соответствует основному синтаксису понятий других основных функций PHP …

В любом случае … Это использует рекурсию. Он гибкий, поскольку позволяет вам указать размер куска (если вы хотите сделать это по дороге или для другого проекта). Я сделал это как личный вызов, чтобы увидеть, что я могу придумать.

 <?php function chunk_explode($glue=' ',$pieces='',$size=2,$final=array()) { if(!is_string($pieces) && !is_array($pieces)) return false; if(is_string($pieces)) $pieces = explode($glue,$pieces); $num_pieces = sizeof($pieces); if($num_pieces <= 0) return $final; if($num_pieces >= $size) { $arr_chunk = array_chunk($pieces, $size); array_push($final,implode($glue,$chunk[0])); for($i=0;$i<=$size;$i++) { array_shift($pieces); } return chunk_explode($glue,$pieces,$size,$final); } array_push($final,implode($glue,$pieces)); return $final; } $string = "This is my test case for an example."; chunk_explode(' ',$string,3); 

Если функция chunk_explode , сообщите мне, чтобы я мог учиться на своих ошибках.

В PHP есть 75 функций массива, давайте попробуем использовать их вместо циклов!

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

  function chunk_explode($string, $chunks = 2, $delim = ' ') { $A = explode($delim, $string); $A = array_chunk($A, $chunks); return array_map( create_function('$x', 'return implode(\'' . $delim . '\',$x);'), $A); } 
  $str = "This is my test case for an example."; $arr = split(' ', $str); $newArr = array(); $count = count($arr); for($i=0;$i<$count;$i = $i + 2) { $newArr[] = $arr[$i] . ' ' . $arr[$i+1]; } array(4) { [0]=> string(7) "This is" [1]=> string(7) "my test" [2]=> string(8) "case for" [3]=> string(11) "an example." } 

Ну, очевидно, это не лучшее решение, но было интересно понять это по-своему. Еще так много узнать …

 function solveThisPuzzle($string) { $modified_string = preg_replace('(\s)', '+', $string, -1, $count); $words = explode('+', $modified_string); $phrases_arr = array(); for($i = 1; $i < $count+1; $i++) { if(($i % 2)) { $phrase = $words[$i-1].' '.$words[$i]; $phrases_arr[] = $phrase; unset($phrases_arr[$i]); } elseif($i == $count) { $phrase = $words[$i]; $phrases_arr[] = $phrase; } else { $phrase = NULL; } } foreach($phrases_arr as $final_phrase) { $solution .= $final_phrase.'<br />'; } return $solution; с function solveThisPuzzle($string) { $modified_string = preg_replace('(\s)', '+', $string, -1, $count); $words = explode('+', $modified_string); $phrases_arr = array(); for($i = 1; $i < $count+1; $i++) { if(($i % 2)) { $phrase = $words[$i-1].' '.$words[$i]; $phrases_arr[] = $phrase; unset($phrases_arr[$i]); } elseif($i == $count) { $phrase = $words[$i]; $phrases_arr[] = $phrase; } else { $phrase = NULL; } } foreach($phrases_arr as $final_phrase) { $solution .= $final_phrase.'<br />'; } return $solution; 

}

 $string = "This is my test case for an example, huzzah!"; echo solveThisPuzzle($string); This is my test case for an example, huzzah!