【问题标题】:Conversion from string to int does not work从 string 到 int 的转换不起作用
【发布时间】:2012-08-16 00:45:14
【问题描述】:

我使用正则表达式从文档中获取值并将其存储在名为$distance 的变量中。那是一个字符串,但我必须将它放在数据库中表的 int 列中。

当然,通常我会去说

$distance=intval($distance);

但它不起作用!我真的不知道为什么。

这就是我所做的一切:

preg_match_all($regex,$content,$match);
$distance=$match[0][1];
$distance=intval($distance);

正则表达式是正确的,如果我回显 $distance,它是例如“0” - 但我需要它是 0 而不是“0”。使用 intval() 总是会以某种方式将其转换为空字符串。

编辑 1

正则表达式是这样的:

$regex='#<value>(.+?)</value>#'; // Please, I know I shouldn't use regex for parsing XML - but that is not the problem right now

然后我继续

preg_match_all($regex,$content,$match);
$distance=$match[0][1];
$distance=intval($distance);

【问题讨论】:

  • 在解析之前转储你的距离变量,如果你不显示你正在处理的字符串,很难看出什么问题......还有正则表达式
  • 我可能是错的,和/或遗漏了一些东西,但我认为“0”的字符串值将使其进入数据库中的 int 列而无需任何转换。
  • 你试过像$distance = (int) $distance;这样的简单转换吗?
  • 是的,我也尝试过 (int) - 请参阅上面的正则表达式。
  • 距离回显之前你尝试转换它吗?试试看它的长度?也许有空白?

标签: php int type-conversion


【解决方案1】:

在零之前必须有一个空格,或者可能(已经在那里,做到了)一个 0xA0 字节。在您的正则表达式中使用“\d”以确保获得数字。

编辑:您可以使用清除值

$value = (int)trim($value, " \t\r\n\x0B\xA0\x00");

http://php.net/manual/en/function.trim.php

【讨论】:

  • 究竟如何?我不确定如何在正则表达式中集成\d
  • 你可以使用类似 '#\D*([\d]+?)\D*#' 的东西(这只会捕获整数并且会失败,例如“ 3.1415") -- 或者更好,你可以在运行 (int) 之前 trim() 值。如果问题是纯空格或回车,则应该使用 trim()。不确定被诅咒的 0xA0 字符(“不间断空格”)
【解决方案2】:

为什么您的正则表达式中需要问号?试试这个:

$regex='#<value>(.+)</value>#';

【讨论】:

    【解决方案3】:

    如果你做print_r($match),你会看到你需要的数组是$match[1]

    $content = '<value>1</value>, <value>12</value>';
    
    $regex='#<value>(.+?)</value>#';
    
    preg_match_all($regex,$content,$match);
    
    print_r($match);
    

    输出:

    Array
    (
        [0] => Array
            (
                [0] => <value>1</value>
                [1] => <value>12</value>
            )
    
        [1] => Array
            (
                [0] => 1
                [1] => 12
            )
    
    )
    

    在这种情况下:

    $distance = (int) $match[1][1];
    
    var_dump($distance);
    

    输出:int(12)


    或者,您可以使用PREG_SET_ORDER 标志,即preg_match_all($regex,$content,$match,$flags=PREG_SET_ORDER);,$match 数组具有以下结构:

    Array
    (
        [0] => Array
            (
                [0] => <value>1</value>
                [1] => 1
            )
    
        [1] => Array
            (
                [0] => <value>12</value>
                [1] => 12
            )
    
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-11
      • 2016-12-16
      • 2018-06-16
      • 1970-01-01
      • 2015-09-27
      • 2013-12-15
      • 2016-07-30
      相关资源
      最近更新 更多