Как найти все подстроки строки в PHP

Мне нужно преобразовать строки формы

"abc" 

в массивы формы

 Array ( [0] => a [1] => ab [2] => abc [3] => b [4] => bc [5] => c ) 

Предоставляет ли PHP встроенную функцию для преобразования строк во все подстроки? Если нет, то каков путь наименьшего сопротивления для получения всех подстрок? Есть ли простой способ, возможно, взорвать () строку и использовать массив op для создания всех [упорядоченных] перестановок?

Ура!

Использование метода in-php-array-is-the-duct-the-the-the-the-universe : P

 function get_all_substrings($input, $delim = '') { $arr = explode($delim, $input); $out = array(); for ($i = 0; $i < count($arr); $i++) { for ($j = $i; $j < count($arr); $j++) { $out[] = implode($delim, array_slice($arr, $i, $j - $i + 1)); } } return $out; } $subs = get_all_substrings("abc", " "); print_r($subs); 
 <?php function get_all_substrings($input){ $subs = array(); $length = strlen($input); for($i=0; $i<$length; $i++){ for($j=$i; $j<$length; $j++){ $subs[] = substr($input, $i, $j); } } return $subs; } $subs = get_all_substrings("Hello world!"); print_r($subs); ?> 

Даже если у вас есть фантастический двухстрочный лайнер, я сомневаюсь, что это более эффективно или легко понять (для кого-то, кто понял это, им, вероятно, придется смотреть на документы. Большинство людей, вероятно, получают то, что делает субстрат, даже не глядя вверх).

Незначительная коррекция ко второй:

 <?php function get_all_substrings($input){ $subs = array(); $length = strlen($input); for($i=0; $i<$length; $i++){ for($j=$i; $j<$length; $j++){ $subs[] = substr($input, $i, ($j - $i) + 1); } } return $subs; } $subs = get_all_substrings("abc"); print_r($subs); ?> 

Подстроки не являются перестановками. explode() , затем используйте две вложенные петли вместе с array_slice() чтобы получить соответствующие элементы.

Их уже можно подумать о массивах этой формы.

Просто обратитесь к содержимому с помощью функции, которая принимает индекс как параметр и возвращает нужную строку.

И этот вопрос не будет полным без рекурсивного ответа:

 function get_substrings($str){ $len = strlen($str); $ans = array(); $rest = array(); for ($i = 1; $i <= $len; $i++) { $ans[] = substr($str, 0, $i); } if($str){ $rest = get_substrings(substr($str, 1)); } return array_merge($ans, $rest); } $subs = get_substrings("abc"); print_r($subs); 

Это работает и работает также с многобайтовыми строками, все вышеприведенные методы не возвращают нулевые и дублированные значения.

 function substrings($str, $charset = 'UTF-8') { $length = mb_strlen($str, $charset); $subs = []; for ($i = 0; $i < $length; $i++) for ($j = 1; $j <= $length; $j++) $subs[] = mb_substr($str, $i, $j, $charset); return array_unique($subs); } print_r(substrings("php")); 

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

Обоснуйте, почему вам нужна эта функция, и проработайте другой путь вокруг проблемы.