2014-02-15 34 views
0
function splitsection($string,$start,$end) { 
    return strstr(substr($string, strpos($string, $start) + strlen($start)), $end, true); 
} 

我收到以下错误出于某种原因:为什么错误“strstr()的参数计数错误”?

Warning: Wrong parameter count for strstr() 

任何想法?

+2

可能的重复:http://stackoverflow.com/questions/6954792/wrong-parameter-count-for-strstr – Reger

+2

检查[手册](http://dk1.php.net/strstr),解释说,在'5.3.0':“*添加了可选参数before_needle。*”。这意味着要使用最后一个参数,至少需要PHP 5.3.0或创建自己的函数来执行相同的操作。 – h2ooooooo

+0

@ tas9我看到这是因为较低的PHP版本,任何人都可以帮助使这个功能兼容旧版本? –

回答

2

PHP manual指定首先将$before_needle参数添加到5.3.0中。因此,如果您使用较旧的版本,则会应用一个太多的参数。别担心,不过,你可以使用strpossubstr,使其在旧版本的PHP的工作容易复制strstr功能(< 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 = '[email protected]'; 
    $domain = strstr_replica($email, '@'); 
    var_dump($domain); //string(12) "@example.com" 

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

DEMO

-1

更新到PHP版本5.3或更新版本。

+0

@Neit我没有这个选项,因为即时共享主机 –

+0

然后更改主机。我工作的主机提供共享主机,并有一个下拉菜单来选择5.2,5.3或5.4,甚至很快就会增加5.5。 –

0

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

的PHP docs说:

5.3.0新增可选参数before_needle。

0

这里有一个更适合你的解决方案:

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

$email = '[email protected]'; 
$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 
?>