intval()似乎与shell中的信息(正常运行时间)不能很好地协同工作

时间:2013-08-17 17:28:38

标签: php

我从这里得到了值

$uptime = explode(',', `uptime`);

$uptime[3]load average: 2.26

但是,intval($uptime[3]);会返回0

我认为这可能是因为小数位,所以我也试过了。

$uptime_days = strpos($uptime[0], ' ');
$uptime_days_value = substr($uptime[0], $uptime_days + 9);
echo intval($uptime_days_value);

$uptime_days_value返回up 60 days,因此intval()应该返回60,而是返回0

2 个答案:

答案 0 :(得分:2)

如果$ uptime [3]为load average: 2.26,那么你将获得0返回,因为load average不是琥珀(整数或实数)

$uptime[3] = 'load average: 2.26';
echo intval(explode(': ', $uptime[3])[1]);

如果$uptime_days_valueup 60 days,则intval()将返回0,因为up不是数字

$uptime_days_value = 'up 60 days';
echo intval(explode(' ', $uptime_days_value)[1]);

答案 1 :(得分:2)

使用正则表达式

<?php
   $string = "load average: 2.26";
   $expression = "/[0-9]+\\.*[0-9]*";

   $matches = array();
   if(preg_match($expression, $string, $matches) != 0) {
      print_r($matches);
   }
 ?>
如果有多种类型,则应打印

:#或#。#,任意位数:

 Array
 (
   [0] => "2.26"
 )

请注意,$ matches通过引用传递,因此$ matches的现有值将在函数调用中被替换。

然后,获取整数或浮点值:

$number = intval($matches[0]);