以递归方式查找数组中的所有DateTime对象并对其进行格式化

时间:2014-04-16 17:22:34

标签: php datetime

我想找到所有作为Datetime类实例的对象,然后在每个对象中使用format()方法。

我尝试了这个,但这不能递归地工作。有谁知道为什么?我怎么能这样做?

<?php

namespace MyNamespace;

class MyClass {

    public function convertDate(&$item)
    {
        foreach ($item as $k => $v) {
            if (is_array($v)) {
                $this->convertDate($v);
            } elseif ($v instanceof \Datetime) {
                $item[$k] = $v->format('d/m/Y');
            }
        }
    }

}

1 个答案:

答案 0 :(得分:2)

解决方案

我在数组键中调用convertDate()方法,但我需要传递参数array [key],所以我将$this->convertDate($k)更改为$this->convertDate($item[$k])

<?php

namespace MyNamespace;

class MyClass {

    public function convertDate(&$item)
    {
        foreach ($item as $k => $v) {
            if (is_array($v)) {
                $this->convertDate($item[$k]); // the problem was here, now its working
            } elseif ($v instanceof \Datetime) {
                $item[$k] = $v->format('d/m/Y');
            }
        }
    }
}