【问题标题】:Why error "Wrong parameter count for strstr()"?为什么错误“strstr() 的参数计数错误”?
【发布时间】:2014-03-15 02:01:51
【问题描述】:
function splitsection($string,$start,$end) {
    return strstr( substr( $string, strpos( $string, $start) + strlen( $start)), $end, true);
}

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

Warning: Wrong parameter count for strstr()

有什么想法吗?

【问题讨论】:

  • 检查manual,它在5.3.0 中解释了这一点:“添加了可选参数 before_needle.”。这意味着要使用最后一个参数,您至少需要使用 PHP 5.3.0 或创建自己的函数来做同样的事情。
  • @tas9 我明白了,这是因为 php 版本较低,任何人都可以帮助使此功能与旧版本兼容吗?
  • @PeakDermutag 虽然这样的策略可能会奏效,但您会发现它的阻碍很大,尤其是当您尝试做一些在旧版本中无法做的事情时,例如带有use 的匿名函数。

标签: php


【解决方案1】:

PHP 的manual 指定$before_needle 参数首先添加到5.3.0 中。因此,如果您使用旧版本,您将应用太多参数。不过不用担心,因为您可以使用 strpossubstr 轻松复制 strstr 函数,使其在旧版本的 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

【讨论】:

    【解决方案2】:

    这里为您提供另一种解决方案:

    <?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】:

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

      PHP docs 说:

      5.3.0 增加了可选参数 before_needle。

      【讨论】:

        【解决方案4】:

        更新到 PHP 5.3 或更高版本。

        【讨论】:

        • @Neit 我没有这个选项,因为我在共享主机上
        • 然后更换主机。我工作的主机提供共享主机,带有一个小下拉菜单来选择 5.2、5.3 或 5.4,甚至很快就会添加 5.5。
        猜你喜欢
        • 2011-10-20
        • 2015-12-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-04
        相关资源
        最近更新 更多