【问题标题】:Parse string containing two numbers and assign them to two variables解析包含两个数字的字符串并将它们分配给两个变量
【发布时间】:2010-12-04 11:58:16
【问题描述】:

$pos 在一个字符串中包含由空格分隔的两个数字。

$pos = 98.9 100.2

如何将其拆分为 2 个变量?我显然必须检查两者之间的空间。

之后我想有两个变量:

$number1 = 98.9
$number2 = 100.2 

【问题讨论】:

    标签: php split floating-point explode text-parsing


    【解决方案1】:
    list($number1, $number2) = explode(' ', $pos);
    

    但是,在执行此操作之前,请确保字符串具有正确的格式。

    【讨论】:

      【解决方案2】:

      如果总是空格,则检查

      array explode ( string $delimiter , string $string [, int $limit ] )
      

      在你的情况下,你有

      $foo = "1.2 3.4 invalidfoo"
      $bits = explode(" ",$foo);
      

      给你一个数组:

      echo 0+$bits[0];    
      echo 0+$bits[1];
      echo 0+$bits[3];
      

      使用 +0 强制转换:)

      【讨论】:

      • 你能解释一下$bits[3]吗?
      【解决方案3】:

      你可以使用:

      $pos = "98.9 100.2";
      $vals = preg_split("/[\s]+/", $pos);
      list($number1, $number2) = $vals;
      

      【讨论】:

      • 字符类无益。对于相同的字符串,\s 足以匹配文字空间。 +(一个或多个)量词对于示例字符串不是必需的。最终,示例字符串不需要正则表达式,因为定界子字符串根本不是可变的。此答案缺少教育解释。
      【解决方案4】:

      使用sscanf() 代替explode()preg_split() 等通用字符串拆分函数,您可以立即对隔离值进行数据类型化。

      对于示例字符串,使用 %f 两次将提取空格分隔的值并将两个数值转换为浮点数/双精度数。

      代码:(Demo)

      $pos = '98.9 100.2';
      sscanf($pos, '%f %f', $number1, $number2);
      var_dump($number1);
      echo "\n";
      var_dump($number2);
      

      输出:

      float(98.9)
      
      float(100.2)
      

      还有一种替代语法,其作用方式相同,但将值作为数组返回。 (Demo)

      $pos = '98.9 100.2';
      var_dump(sscanf($pos, '%f %f'));
      

      输出:

      array(2) {
        [0]=>
        float(98.9)
        [1]=>
        float(100.2)
      }
      

      【讨论】:

        猜你喜欢
        • 2022-11-27
        • 1970-01-01
        • 2015-01-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-14
        相关资源
        最近更新 更多