【问题标题】:Shortcut for: $foo = explode(" ", "bla ble bli"); echo $foo[0]快捷键:$foo = explode(" ", "bla ble bli");回声 $foo[0]
【发布时间】:2011-03-30 20:22:58
【问题描述】:

有没有办法在不使用变量的情况下获取拆分字符串的第 n 个元素?

我的 PHP 代码总是这样:

$foo = explode(" ", "bla ble bli");
echo $foo[0];

有没有像 Python 那样更短的方法?

print "bla ble bli".split(" ")[0]

提前致谢。

【问题讨论】:

    标签: php shortcut explode


    【解决方案1】:

    这是人们大多数时候应该使用的而不是explode

    $foo = strtok("bla ble bli", " ");
    

    它会切断第一个字符串部分,直到第一个" "

    如果你放不下explode,那么在Python中最接近[0]的成语是:

    $foo = current(explode(...));
    

    如果它不只是第一个元素,那么它会变得有点麻烦:

    $foo = current(array_slice(explode(...), 2));   // element [2]
    

    【讨论】:

    • 这如何回答问题有没有办法获得第 n 个元素?我的意思是你可以循环调用strtok,然后explode 和数组访问似乎更容易......
    • “好的”答案是echo current(explode(' ', 'a b c'));。但仅适用于第一个。
    • @FelixKling:对。对不起。只看了第一部分。如果你想要[n],那就是更多的语法盐
    • 我同意你的观点,有更好的方法来获取拆分字符串的第一个元素,但这并不是我想要的。想到了一种方法来获取第 n 个元素,而不仅仅是第一个。
    • 这到底是怎样的快捷方式
    【解决方案2】:

    (本身并不是一个真正的答案——其他人确实回答得很好)


    这是 PHP 的下一版本之一应该具备的功能之一(可能是 PHP 5.4)

    有关更多信息,请参阅Features in PHP trunk: Array dereferencing -- 引用给定示例之一:

    <?php
    function foo() {
        return array(1, 2, 3);
    }
    echo foo()[2]; // prints 3
    ?>
    

    【讨论】:

    • 这正是我想要的。迫不及待地想安装 PHP 5.4(如果它附带此版本);-)
    • 很多人都在等待这个(这是一个反复出现的功能请求);不过,不知道 PHP 5.4 何时发布——如果该功能甚至进入下一个 PHP 版本;如果下一个版本甚至被称为 5.4 ^^
    【解决方案3】:

    试试这个:

    一行:

    <?php
    
    echo (($f=explode(" ", "bla ble bli"))?$f[0]:'');
    
    ?>
    

    这里的结果: http://codepad.org/tnhbpYdd

    【讨论】:

      【解决方案4】:

      为什么不直接做:

      function splode($string, $delimiter, $index){
       $r = explode($delimiter, $string);
       return $r[$index];
      }
      

      我喜欢使用这样的小功能。

      【讨论】:

      • 哦,它存在。我将它用于我所有的内部项目,没有人需要知道我的意大利面条代码和其他可怕的语法问题。
      【解决方案5】:

      我只能想到一种表达方式:

      echo list($a) = explode(' ', 'a b c') ? $a : '';
      echo list($_, $b) = explode(' ', 'a b c') ? $b : '';
      

      【讨论】:

        【解决方案6】:

        据我所知,虽然您可以定义一个函数并使用它。

        function firstWord($string) {
          $foo = explode(" ", $string);
          return $string;
        }
        

        【讨论】:

          【解决方案7】:

          我不知道有什么方法可以做你想做的事,尽管我以前多次想做同样的事情。对于这种特定情况,您可以这样做

          $bar = substr($foo, 0, strpos($foo, " "));
          

          这不再是一个额外的变量,但并不是你想要的。

          【讨论】:

            【解决方案8】:

            以下可能是我能想到的最干净的方式来做 OP 要求的事情。它定义了一个函数,但它没有自己的变量,它几乎可以在任何情况下完成工作:

            function at(&amp;$arr, &amp;$pos) { return $arr[$pos]; }

            示例用法:

            echo at( explode('|', 'a|b|c|d'), 1 ); // Outputs 'b'

            该函数是一行代码,不会很难提交到内存中。如果您只使用一次,您可以在本地范围内定义它,以尽量减少代码混乱。
            作为一个额外的好处,因为该函数不对$arr$pos 进行检查,所以它会抛出与尝试访问不存在的数组索引时相同的错误,甚至会返回字符串中的单个字符或键值对数组中的项目。

            【讨论】:

              【解决方案9】:

              关闭。正确的做法是为重复的事物创建一个函数或方法。

              function extract_word($input, $index) {
                  $input = explode(' ', $input);
                  return $input[$index];
              }
              

              如果您可能有不同的单词分隔符,请添加 $separater = ' ' 的第三个参数。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2011-07-30
                • 1970-01-01
                • 2023-03-11
                • 1970-01-01
                • 2023-03-17
                • 2021-09-03
                • 2019-12-29
                • 2010-12-12
                相关资源
                最近更新 更多