今天遇到个比较奇怪的现象,很可能是我储备还不够吧,包含引号的数字的字符串转化为数字时出现了问题
"1000","902865066306","02865066306","SIP Phone","IP Trunk","","trunk20","ON2OFF","1333230069","1333230072","1333230134","65","62","Connected"上面的为一段数据,接下来操作$arr = '"1000","902865066306","02865066306","SIP Phone","IP Trunk","","trunk20","ON2OFF","1333230069","1333230072","1333230134","65","62","Connected"';
$arr = explode(',',$arr);
print_r($arr);打印Array
(
    [0] => "1000"
    [1] => "902865066306"
    [2] => "02865066306"
    [3] => "SIP Phone"
    [4] => "IP Trunk"
    [5] => ""
    [6] => "trunk20"
    [7] => "ON2OFF"
    [8] => "1333230069"
    [9] => "1333230072"
    [10] => "1333230134"
    [11] => "65"
    [12] => "62"
    [13] => "Connected"
)我想把数组里的第九个拿出来来和其他的数据比较,平常把引号包围的字符串转为数字时就是在后面加个0就ok了,可是,今天不一样了echo $arr[8] + 0; //结果为0我就纳闷了,怎么会为0呢,$arr[8]明明有值啊,于是我又测试了下$num = "1333230069";
echo $num+0;//1333230069弄了好久没明白怎么回事,后来就用了两个办法解决了,一个是用正则把数字提出来,另一个是一开始就把字符串里的双引号全都替换为空。可是疑惑还没有解决,啰嗦到现在,就是想问问大大们,为什么上面的做法会出现0的结果,而不是想要的数字。

解决方案 »

  1.   

    var_dump($arr[8]);  //string(12) ""1333230069""
    var_dump($num);  //string(10) "1333230069"这样看就清楚了,将 $arr[8] 的首尾双引号去掉后再运算就对了。
      

  2.   

    $a=str_getcsv($arr);
    var_dump($a[8]);
      

  3.   

    根据你提供的信息我自己也测试了下:
    <?php
    $arr= Array
    (0 => "1000",
        1 => "902865066306",
        2 => "02865066306",
        3 => "SIP Phone",
        4 => "IP Trunk",
        5 => "",
        6 => "trunk20",
        7 => "ON2OFF",
        8 => "1333230069",
        9 => "1333230072",
        10 => "1333230134",
        11 => "65",
        12 => "62",
        13 => "Connected"
    );
    echo gettype($arr[8])."<br>";
    echo $arr[8]."<br>";
    $str1=$arr[8]+0;
    echo gettype($str1)."<br>";
    echo ($str1)."<br>";$num = "1333230069";
    $num1=($num+0);
    echo gettype($num)."<br>";
    echo gettype($num1)."<br>";
    echo $num1;?>
    输出结果是:
    string
    1333230069
    integer
    1333230069
    string
    integer
    1333230069发现没有出现楼主的问题。
      

  4.   

    没必要那么麻烦吧?$arr = '"1000","902865066306","02865066306","SIP Phone","IP Trunk","","trunk20","ON2OFF","1333230069","1333230072","1333230134","65","62","Connected"';
    $t = json_decode("[$arr]");
    print_r($t);Array
    (
        [0] => 1000
        [1] => 902865066306
        [2] => 02865066306
        [3] => SIP Phone
        [4] => IP Trunk
        [5] => 
        [6] => trunk20
        [7] => ON2OFF
        [8] => 1333230069
        [9] => 1333230072
        [10] => 1333230134
        [11] => 65
        [12] => 62
        [13] => Connected
    )也可以
    $t = array_map( function($s) { return trim($s,'"'); }, explode(',', $arr)); // >= php 5.3
    也可以
    $t = array_map( create_function('$s', 'return trim($s,\'"\');'), explode(',', $arr)); // >= php 4直接就处理成可用的数组
      

  5.   

    对于你的疑问
    不错
    $num = "1333230069";
    echo $num+0;//1333230069但是 $arr[8] 是什么呢?
    是 '"1333230069"'
    echo $arr[8] + 0;
    就是
    echo '"1333230069"' + 0;
    当然要输出 0 啦!这样 echo '1333230069"' + 0;
    就输出 1333230069 了字符串转换成数字,是从左边开始去取数字字符的(左边的空格、+、-都是有效的)