0

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 文字列から取得されます。したがって、そこで何かできることがあれば、プレーンテキストでもすべての値を取得できます。

ありがとう!

4

1 に答える 1