【问题标题】:Which PHP version is required for str_split?str_split 需要哪个 PHP 版本?
【发布时间】:2011-01-29 22:39:19
【问题描述】:

我在dreamhost中重新登录我的服务器并测试了一些脚本。我发现我无法使用str_split。给出了未定义函数的消息。我检查了服务器中的版本,它的 PHP 版本是 5.2.12。我只是想知道需要哪个版本?谢谢。

测试代码:

<?php
$arr = str_split("lsdjflsdjflsdjflsdjfl");
print_r($arr);
?>

消息:

Fatal error: Call to undefined function:  str_split() in /test.php on line 3

编辑@贾斯汀·约翰逊

我检查了服务器的系统目录,发现Dreamhost中有两个版本的PHP。在用户的webroot中,文件将被PHP5解析,这就是为什么我通过在webroot中放置一个phpinfo.php得到php 5.2.12 。如果 php 文件直接使用 php test.php 在命令行中运行,另一个 php 版本是 4.x 工作。这就是我收到错误的原因。当我使用时

/usr/local/php5/bin/php test.php

一切都很好。

【问题讨论】:

标签: php function version dreamhost


【解决方案1】:

比起使用str_split,直接遍历字符串的字符通常要容易得多:

$s="abc";
$i=0;
while(isset($s[$i])) {
    echo $s[$i++]." ";
}

看到了吗?

【讨论】:

  • 明白了!我的错。请原谅我的无知。
  • +1,但您应该为此答案添加更多解释,使其不依赖于单独答案的评论线程。
【解决方案2】:

您可以使用 preg_split() 将数组拆分为单个字符,但它会在开头和结尾返回一个额外的空字符串。

$a = preg_split("//","abcdefg");
echo json_encode($a);

打印:

["","a","b","c","d","e","f","g",""]

【讨论】:

    【解决方案3】:

    根据 dreamhost wiki,如果您在 2008 年 9 月之前创建了域,则需要从控制面板手动切换到 php5。

    http://wiki.dreamhost.com/Installing_PHP5#Using_DreamHost.27s_PHP_5

    PHP 5 被添加到所有计划中 DreamHost 截至 2005 年 6 月。截至 2008 年 9 月,对 PHP4 的支持是 停产了,所以你不能再 从 PHP 5 切换回 PHP 4 面板。

    如果您还没有切换到 PHP 5, 您可以在控制面板中执行此操作。 但是,再一次,您将无法 切换后切换回 PHP 4 到 PHP 5。

    以下是从 PHP 4 切换到 PHP 的方法 5:

    1. 登录 DreamHost 控制面板。
    2. 单击域,然后单击管理域。
    3. 单击要激活 PHP 5 的域旁边的扳手图标 on(在 Web Hosting 列下)。
    4. 从下拉菜单中选择 PHP 5.x.x。
    5. 立即单击更改完全托管设置!在底部 部分。
    6. 对您要添加的每个其他域重复步骤 3-5 激活。

    你也可以检查你的 php 版本

    <?php  
       phpinfo();
    ?>
    

    【讨论】:

      【解决方案4】:

      首先:PHP 文档总是会在函数的文档页面上的函数名称下直接说明每个函数所需的版本。

      .htaccess 文件可能位于您的路径中,并导致使用以前版本 (str_split 的行上方

      echo "version:", phpversion(), 
          "<br/>\nstr_split exists? ", 
          function_exists("str_split") ? "true" : "false";
      

      但是,如Col. Shrapnel 所示,没有必要将字符串转换为单个字符的数组来迭代该字符串的字符。字符串也可以使用传统的迭代方法进行迭代,从而使对str_split的调用变得不必要且浪费(除非您需要将字符串分割成固定长度的块,例如:str_split($s, 3)

      foreach ( str_split($s) as $c ) { 
          // do something with character $c
      }
      

      可以替换为

      $s = "lsdjflsdjflsdjflsdjfl";
      
      for ( $i=0; isset($s[$i]); ++$i ) {
          // do something with character $s[$i]." ";
      }
      

      同样,如果不是更清楚的话。

      【讨论】:

        【解决方案5】:

        如果您无法让str_split 工作,只需使用字符串作为数组即可:

        $stuff = "abcdefghijkl";
        echo $stuff[3];
        

        会产生

        d
        

        无论如何,这种方法是最快的。我不知道它是否适合您的需求,但如果可以,希望对您有所帮助!

        【讨论】:

        • 是的...但是不能在foreach中使用。
        • @SpawnCxy 但是你不需要 foreach 来迭代一个字符串!
        • @Col。弹片我不是在迭代一个字符串,我需要处理其中的每个字符。显然我不能手动一个一个地做,你知道的。
        • @SpawnCxy 来处理字符串中的每个字符,你必须对其进行迭代。而且 foreach 并不是 PHP 中唯一的循环运算符。
        • @SpawnCxy 只需使用一个普通的旧 for 循环:$c=strlen($stuff); for($i=0;$i&lt;$c;$i++) { ... } 它应该同样适用于处理每个字符。
        【解决方案6】:

        可以是您的代码中的任何内容。我们怎么知道它不是 10 行脚本或 2000 行脚本?

        【讨论】:

          【解决方案7】:

          所需的版本是 PHP 5 或更高版本。所以理论上你的程序应该可以工作。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2017-09-21
            • 2011-08-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-04-21
            相关资源
            最近更新 更多