【问题标题】:How to split a string based on position如何根据位置拆分字符串
【发布时间】:2013-04-04 21:01:58
【问题描述】:

我想根据字符的位置拆分一个变量。生成的第一个字符串应具有指定位置之前的先前位置,而另一个字符串应包含其他部分。

假设如果我有一个变量$var = "2013AD"; 我想要

$var1 = 2013var2 = 'AD'

我怎样才能做到这一点?

【问题讨论】:

  • 计数为 4 (str_split) 还是介于字母和数字之间(正则表达式)?
  • 是吗? 2 个选项,你回答“是”?

标签: php


【解决方案1】:

嗯...这里是 occam 的剃须刀,但是 substr

$var1 = substr($var, 0, 4);
$var2 = substr($var, 4);

【讨论】:

    【解决方案2】:

    您可以简单地使用sscanf

    $var = "2013AD";
    list($var1, $var2) = sscanf($var, "%4d%2s");
    echo $var1, ":", $var2;
    

    输出

    2013:AD
    

    如果您正在使用date,请这样对待:

    $var = "2013AD";
    $date  = DateTime::createFromFormat("Y\A\D",$var);
    echo $date->format("Y");
    

    【讨论】:

    • 这是假设字符串实际上代表一个日期。
    • @bab - 太搞笑了......我实际上被your comment ping通了。顺便说一句,不是我的 DV...
    • @bab- 哈哈哈......我想是因为我是唯一的其他评论者,而你是 OP......但仍然:P
    【解决方案3】:
    <?php
    
    function py_slice($input, $slice) {
        $arg = explode(':', $slice);
        $start = intval($arg[0]);
        if ($start < 0) {
            $start += strlen($input);
        }
        if (count($arg) === 1) {
            return substr($input, $start, 1);
        }
        if (trim($arg[1]) === '') {
            return substr($input, $start);
        }
        $end = intval($arg[1]);
        if ($end < 0) {
            $end += strlen($input);
        }
        return substr($input, $start, $end - $start);
    }
    
    print py_slice('abcdefg', '2') . "\n";
    print py_slice('abcdefg', '2:4') . "\n";
    print py_slice('abcdefg', '2:') . "\n";
    print py_slice('abcdefg', ':4') . "\n";
    print py_slice('abcdefg', ':-3') . "\n";
    print py_slice('abcdefg', '-3:') . "\n";
    
    ?>
    

    示例的输出:

    • c
    • 光盘
    • cdefg
    • abcd
    • abcd
    • efg

    【讨论】:

    • 对于不同的问题,这可能是一个非常有用的答案。但在这篇文章中,我觉得它是过度杀戮。甚至没有解释说这实际上是在实现一种类似 python 的方法来访问类似数组的对象。
    【解决方案4】:

    你可以使用 substr 函数

    $var1 = substr($var, 0, 4);
    $var2 = substr($var, 4);
    

    【讨论】:

      【解决方案5】:

      您还可以使用preg_split()\K 在字符串中的零宽度位置展开,这样在拆分时不会丢失任何字符。 \K 告诉正则表达式引擎忘记之前匹配的一个或多个数字。 2 的作用是将输出中的元素数量限制为最多 2 个。

      代码:(Demo)

      $var = "2013AD";
      
      [$year, $jesusStatus] = preg_split('~\d+\K~', $var, 2);
      
      var_export($year);
      echo "\n";
      var_export($jesusStatus);
      

      输出:

      '2013'
      'AD'
      

      【讨论】:

        猜你喜欢
        • 2023-04-06
        • 1970-01-01
        • 2022-11-15
        • 2018-05-12
        • 2021-11-07
        • 1970-01-01
        • 2018-06-07
        • 2019-09-19
        • 1970-01-01
        相关资源
        最近更新 更多