Web ベースの API からあらゆる種類の異なるデータ配列を受け取るスクリプトがあります。このプログラムは、すべての日付を ISO 8601 形式 (2013-08-12T09:00:00:000-0600) で返します。それらを簡単にUNIXタイムスタンプに変換する関数がありますが、毎回値フィールドをその関数に送信する必要があり、面倒です。
秘訣は、その時点で実行している操作に応じて、Web アプリからの応答配列が大きく異なることです。一次元と多次元。日付ホルダーのキーネームも多数あります。
それで、データの完全な配列を関数に簡単に送信して、ISO タイムスタンプを探し出し、その場で UNIX タイムスタンプに変換して、スワップ アウトされたタイムスタンプと同じ配列を返す方法はありますか?
一度に1つずつ変換するために使用する関数は次のとおりです。
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」という単語が含まれています。
それが役立つ場合、私の例の "results['data']" 配列は、json_encode を使用して配列を作成する json 文字列から取得されます。したがって、そこで何かできることがあれば、プレーンテキストでもすべての値を取得できます。
ありがとう!