У меня есть сценарий, который получает всевозможные различные массивы данных из веб-интерфейса. Эта программа возвращает все даты в формате ISO 8601 (2013-08-12T09: 00: 00: 000-0600). У меня есть функция, которая легко преобразует их в временную метку unix, но я должен каждый раз представлять поле значений этой функции, которая может стать утомительной.Преобразование iso 8601 временных меток в временную метку unix в многомерном массиве в PHP
Уловка в зависимости от того, какую операцию я запускаю в то время, массив ответов из веб-приложения будет совсем другим. Одномерные и многомерные. Есть также многочисленные ключевые имена для держателей дат.
Итак, есть ли способ легко представить полный массив данных функции, которая будет искать временные метки 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);
}
}
}
Как вы можете видеть, ключ значение всегда будет содержать слово «Date» как часть имени ключа.
Если это помогает, массив результатов «[data]] в моем примере исходит из строки json, где я использую json_encode для создания массива. Поэтому у меня есть все значения в текстовом виде, если что-то можно сделать там.
Спасибо!
Закрыть. Он просматривает массив и выполняет преобразование времени, но он никогда не сохраняет новый номер обратно в массив, перезаписывая метку времени ISO. Если я эхо «$ e», это правильная метка времени, просто нужно выяснить, как заставить ее заменить метку времени ISO. – Josh
@Josh - Я не знаю точно, что вы имеете в виду, но я исправил пару опечаток и обновил свой ответ с образцовыми данными. Можете ли вы уточнить, что вы имеете в виду, перезаписав tiemstamp? –
Да, я нашел опечатку. Возможно, это факт, что почти 1 час ночи, но я его переделал, и он работает. Потрясающие! Благодаря! – Josh