如何将var_dump的输出转换为数组或变量?

时间:2015-02-19 11:37:31

标签: php arrays var-dump

我想尝试两次差异。我已经使用了diff函数,现在我想将var_dump的输出传输到数组或变量,以便我能够打印剩余时间。我的代码写在下面。 如何检索以下输出到数组或变量?

$val1 = '2014-03-18 10:34:09';

$var2 = date("Y-m-d H:i:s");

$datetime1 = new DateTime($val1);

$datetime2 = new DateTime($val2);

var_dump($datetime1->diff($datetime2));

我的输出显示在下方

object(DateInterval)#3 (8) {

  ["y"]=>
  int(0)

  ["m"]=>
  int(11)

  ["d"]=>
  int(1)

  ["h"]=>
  int(6)

  ["i"]=>
  int(17)

  ["s"]=>
  int(23)

  ["invert"]=>
  int(0)

  ["days"]=>
  int(338)

}

3 个答案:

答案 0 :(得分:2)

只需编写以下内容即可返回数组。

$data = $datetime1->diff($datetime2);  //Return Object
$data = (array) $datetime1->diff($datetime2);  //Return Array

对象输出

$data->y = 0  //year
$data->m = 11 //month 
$data->d = 1  //day
$data->h = 1  //hour
$data->i = 8  //minute
$data->s = 33 //second

数组输出

$data['y'] = 0  //year
$data['m'] = 11 //month 
$data['d'] = 1  //day
$data['h'] = 1  //hour
$data['i'] = 8  //minute
$data['s'] = 33 //second

<强> Demo

答案 1 :(得分:1)

使用函数date()格式化当前时间,然后将结果传递给类DateTime的构造函数,该构造函数将日期解析为组件以获取当前时间戳。

没有必要让它做这项艰苦的工作。如果您需要包含当前日期&amp;的DateTime对象您需要做的就是创建DateTime的新实例,并且不向其constructor传递任何参数:

$datetime2 = new DateTime();

现在,关于两个日期之间的差异。实际上,使用DateTime::diff()是正确的方法,但使用var_dump()无效并且不需要将其转换为数组(或其他奇怪的东西)。

DateTime::diff()返回的值是DateInterval类型的对象。它提供了对其属性的公共访问,它还为您提供了方法DateInterval::format(),这是一种从封装的值中生成可读字符串的好方法。

$val1 = '2014-03-18 10:34:09';
$datetime1 = new DateTime($val1);
$datetime2 = new DateTime('now');

$diff = $datetime1->diff($datetime2);

echo("It's been ".$diff->days.' days since '.$val1.".\n");
echo($diff->format("%a days, %h hours, %i minutes and %s seconds to be more precise.\n"));

答案 2 :(得分:0)

在我看来,你仍然需要操作这个变量,所以我建议你将返回值赋给变量,而不是试图从var_dump中获取字符串值。

  

$diff = $datetime1->diff($datetime2) - 根据@panther。

如果您的目标是捕获字符串输出,那么您可以使用$valueInString = print_r($diff, true);,尽管它的输出与var_dump略有不同。

P.S。我认为你拼错了$var2,因为它应该是$val2