How to Get All Substrings of a Given String in PHP ?
Last Updated :
14 Feb, 2024
Extracting all possible substrings from a given string is a common task in text processing, pattern recognition, and various other applications in PHP programming. This operation involves generating every possible combination of characters present in the string, including both contiguous and non-contiguous sequences.
A substring is any continuous sequence of characters within a string. For a string of length n, the number of possible substrings is n(n + 1)/2, not counting the empty string. This concept is crucial in many domains, including search operations, data analysis, and when implementing algorithms that process text data.
Approach 1: Nested Loops for Contiguous Substrings
The basic method to get all contiguous substrings of a string is by using nested loops. The outer loop iterates through each character in the string as a starting point, and the inner loop generates substrings starting from the outer loop’s current position.
PHP
<?php
function getAllSubstrings( $string ) {
$substrings = [];
$length = strlen ( $string );
for ( $i = 0; $i < $length ; $i ++) {
for ( $j = $i ; $j < $length ; $j ++) {
$substrings [] = substr ( $string , $i , $j - $i + 1);
}
}
return $substrings ;
}
$string = "abc" ;
$substrings = getAllSubstrings( $string );
echo "All substrings of '$string':\n" ;
print_r( $substrings );
?>
|
Output
All substrings of 'abc':
Array
(
[0] => a
[1] => ab
[2] => abc
[3] => b
[4] => bc
[5] => c
)
Approach 2: Bitmasking for All Subsequences
To include both contiguous and non-contiguous substrings (subsequences), you can use a more advanced technique involving bitmasking. This method represents each substring as a binary number, where each bit determines whether a character at a certain position is included in the substring.
PHP
<?php
function getAllSubstrings( $string ) {
$subsequences = [];
$length = strlen ( $string );
$total = 1 << $length ;
for ( $i = 0; $i < $total ; $i ++) {
$subseq = '' ;
for ( $j = 0; $j < $length ; $j ++) {
if ( $i & (1 << $j )) {
$subseq .= $string [ $j ];
}
}
if (! empty ( $subseq )) {
$subsequences [] = $subseq ;
}
}
return $subsequences ;
}
$string = "abc" ;
$substrings = getAllSubstrings( $string );
echo "All substrings of '$string':\n" ;
print_r( $substrings );
?>
|
Output
All substrings of 'abc':
Array
(
[0] => a
[1] => b
[2] => ab
[3] => c
[4] => ac
[5] => bc
[6] => abc
)
Share your thoughts in the comments
Please Login to comment...