为什么错误“strstr()的参数计数错误”?

时间:2014-02-15 17:13:43

标签: php

function splitsection($string,$start,$end) {
    return strstr( substr( $string, strpos( $string, $start) + strlen( $start)), $end, true);
}

由于某种原因,我收到以下错误:

Warning: Wrong parameter count for strstr()

有什么想法吗?

4 个答案:

答案 0 :(得分:2)

PHP manual指定首先在$before_needle中添加5.3.0参数。因此,如果您使用旧版本,则应用的参数太多。但是,请不要担心,因为您可以使用strstrstrpos轻松复制substr函数,以使其在旧版本的PHP(< 5.3.0)中运行:

<?php
    function strstr_replica($haystack, $needle, $beforeNeedle = false) {
        $needlePosition = strpos($haystack, $needle);

        if ($position === false) {
            return false;
        }

        if ($beforeNeedle) {
            return substr($haystack, 0, $needlePosition);
        } else {
            return substr($haystack, $needlePosition);
        }
    }
?>

<强>用法:

<?php
    $email = 'name@example.com';
    $domain = strstr_replica($email, '@');
    var_dump($domain); //string(12) "@example.com"

    $user = strstr_replica($email, '@', true);
    var_dump($user); //string(4) "name"
?>

DEMO

答案 1 :(得分:0)

我认为您使用的是旧的PHP版本。 PHP 5.2及更早版本不支持第三个参数。我建议您使用较新版本的PHP,如版本5.3,5.4,5.5或5.6。

PHP docs说:

  

5.3.0添加了可选参数before_needle。

答案 2 :(得分:0)

这是您的另一个解决方案:

<?php
//Returns Part of Haystack string starting from and including  
//the first occurrence of needle to the end of haystack.

$email  = 'name@example.com';  
$needle = '@';  
$domain = strstr($email, $needle);
echo $domain.'<br />';
// prints @example.com  


//Returns Part of Haystack The way YOU want pre PHP5.3.0  
$revEmail = strrev($email);  
$name = strrev(strstr($revEmail, $needle));  
echo $name.'<br />';  
echo substr($name,0,-(strlen($needle)));  
// prints name
?>

答案 3 :(得分:-1)

更新到PHP 5.3或更新版本。