How to find all substrings of a string in PHP

前端 未结 9 992
悲&欢浪女
悲&欢浪女 2020-12-11 06:05

I need to convert strings of the form

\"a b c\"

into arrays of the form

Array
(
    [0] => a
    [1] => a b
    [2] =         


        
相关标签:
9条回答
  • 2020-12-11 06:28

    For even quite short strings, the memory and runtime requirement will explode. Even in native code this is a scary performance problem.

    Justify why you need this function, and work out another way around the problem.

    0 讨论(0)
  • 2020-12-11 06:29

    Using the in-php-array-is-the-duct-tape-of-the-universe way :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("a b c", " ");
    print_r($subs);
    
    0 讨论(0)
  • 2020-12-11 06:34

    This works and it works also with multibyte strings, all the methods above don't, they return null and duplicated values.

    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"));
    
    0 讨论(0)
  • 2020-12-11 06:37

    They can already be thought of arrays of that form.

    Simply address the contents with a function that takes the index as a parameter and returns the string sliced appropriately.

    0 讨论(0)
  • 2020-12-11 06:38

    And this question will not be complete without the recursive answer:

    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);
    
    0 讨论(0)
  • 2020-12-11 06:42

    Minor correction to the second one:

    <?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);
    
    ?>
    
    0 讨论(0)
提交回复
热议问题