0

我有一个脚本,可以从基于 Web 的 API 接收各种不同的数据数组。该程序以 ISO 8601 格式 (2013-08-12T09:00:00:000-0600) 返回所有日期。我有一个函数可以轻松地将它们转换为 unix 时间戳,但是我必须每次都将 value 字段提交给该函数,这可能会变得乏味。

诀窍是,根据我当时正在运行的操作,来自网络应用程序的响应数组会非常不同。单维和多维。日期持有者也有许多关键名称。

那么,是否有某种方法可以轻松地将完整的数据数组提交给一个函数,该函数将查找 ISO 时间戳并将它们就地转换为 unix 时间戳,返回与换出时间戳相同的数组?

这是我用来一次转换一个的函数:

function tstamptotime($tstamp)
{
    // converts ISODATE to unix date
    // 1984-09-01T14:21:31Z
    sscanf($tstamp, "%u-%u-%uT%u:%u:%uZ", $year, $month, $day, $hour, $min, $sec);
    $newtstamp = mktime($hour, $min, $sec, $month, $day, $year);
    return $newtstamp;
}

这是我想出的,但我意识到这个想法不会考虑多维数组,诀窍是数组可以是 2-25 层深的任何地方:

foreach($results['data'] as $key => $value) {
            if(strpos($key,'Date') !== false) {
                if(strlen($value) == 28) {
                    $results['data'][$key] = tstamptotime($value);
                }
            }
        }

如您所见,值的键将始终包含“日期”一词作为键名的一部分。

如果有帮助,我示例中的“results['data']”数组来自我使用 json_encode 创建数组的 json 字符串。因此,如果可以在那里完成某些事情,我也确实拥有纯文本中的所有值。

谢谢!

4

1 回答 1

0
$res = $results['data'];
array_walk_recursive($res, function (&$e, $k){
    if(strpos($k, 'Date') !== false) {
        if(strlen($e) == 28) {
            sscanf($e, "%u-%u-%uT%u:%u:%uZ", $year, $month, $day, $hour, $min, $sec);
            $e = mktime($hour, $min, $sec, $month, $day, $year);
        }
    }
});
$results['data'] = $res;

由于我不知道您的数据是什么样的,因此我使用以下方法进行了测试:

$results['info'] = array('some','info','here');
$results['data'][] = array('Date1' => '2013-08-09T09:00:00:000-0600');
$results['data'][] = array('Date2' => '2013-08-10T09:30:00:000-0600');
$results['data'][] = array('Date3' => '2013-08-11T09:45:00:000-0600');
$results['data'][] = array('Date4' => '2013-08-12T10:05:00:000-0600');
$results['data']['nested'][] = array('Date1' => '2013-08-09T09:00:00:000-0600');
$results['data']['nested'][] = array('Date2' => '2013-08-10T09:30:00:000-0600');
$results['data']['nested'][] = array('Date3' => '2013-08-11T09:45:00:000-0600');
$results['data']['nested'][] = array('Date4' => '2013-08-12T10:05:00:000-0600');

输出:

Array(
    [info] => Array(
            [0] => some
            [1] => info
            [2] => here
        )
    [data] => Array(
            [0] => Array(
                    [Date1] => 1376049600
                )
            [1] => Array(
                    [Date2] => 1376137800
                )
            [2] => Array(
                    [Date3] => 1376225100
                )
            [3] => Array(
                    [Date4] => 1376312700
                )
            [nested] => Array(
                    [0] => Array(
                            [Date1] => 1376049600
                        )
                    [1] => Array(
                            [Date2] => 1376137800
                        )
                    [2] => Array(
                            [Date3] => 1376225100
                        )
                    [3] => Array(
                            [Date4] => 1376312700
                        )
                )
        )
)
于 2013-08-13T05:56:56.453 回答