Open In App

How to Get All Substrings of a Given String in PHP ?

Last Updated : 14 Feb, 2024
Improve
Improve
Like Article
Like
Save
Share
Report

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;
}
  
// Driver code
$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;
}
  
// Driver code
$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
)


Like Article
Suggest improvement
Share your thoughts in the comments

Similar Reads