Оператор возврата не работает в php, хотя значение присутствует, по-прежнему переменная при возврате дает значение null - PullRequest
0 голосов
/ 16 июня 2020
function get_string_between($string, $start, $end, $preo) {
    if (strpos($string,$start)===FALSE) {    
        return $preo;
    } else {
        if (strlen($string)!==0) {
            $ini   = strpos($string, $start);        
            $pre   = substr($string,0,$ini);
            $ini   += strlen($start);
            $len   = strpos($string, $end, $ini) - $ini;
            $part  = chr(substr($string, $ini, $len));
            $preo .= $pre;
            $preo .= $part;
            $newString = substr($string, strlen($pre) + strlen(substr($string,$len)) + strlen($start) + strlen($end), strlen($string)-strlen($pre));
            get_string_between($newString,$start,$end,$preo);
        } 
    }  
}

$rr = get_string_between("vishalOo59oOOo59oO", 'Oo', 'oO', '');
var_dump($rr);           

Вышеупомянутая программа возвращает null.

Ответы [ 2 ]

0 голосов
/ 16 июня 2020

Думаю, вам не нужно создавать такую ​​типичную функцию, если вы хотите найти строку между двумя подстроками, например:

$str = 'vishalOo59oOOo59oO';
preg_match('/Oo(.*?)oO/', $str, $match);
print_r($match);

Вывод:

Array
(
    [0] => Oo59oO
    [1] => 59
)
59

Позвольте мне знайте, если у вас возникнет какая-либо проблема

Изменить:

Также в вашем заявлении вы ничего не возвращаете в операторе else, вам нужно что-то вернуть, чтобы получить.

function get_string_between($string, $start, $end, $preo) {
    if (strpos($string,$start)===FALSE) {    
        return $preo;
    } else {
        if (strlen($string)!==0) {
            $ini   = strpos($string, $start);        
            $pre   = substr($string,0,$ini);
            $ini   += strlen($start);
            $len   = strpos($string, $end, $ini) - $ini;
            $part  = chr(substr($string, $ini, $len));
            $preo .= $pre;
            $preo .= $part;
            $newString = substr($string, strlen($pre) + strlen(substr($string,$len)) + strlen($start) + strlen($end), strlen($string)-strlen($pre));
            return get_string_between($newString,$start,$end,$preo);
        } 
    }  
}
0 голосов
/ 16 июня 2020

Вы ничего не возвращаете в блоке else. Поэтому, если условие равно false, то возвращаемое значение будет null.

Возврат из вашего рекурсивного вызова в блоке else:

return get_string_between($newString,$start,$end,$preo);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...