2017-10-17 7 views
0

次のJSONレトルト配列では、最近の2つの日付($ json ['時系列(日)]] [日付] ['4。閉じる'])でクローズ価格にアクセスしたいと考えています。データは株価であるため、日付は毎日変更されます。また、週末や祝日のデータもありません。 当日のデータにアクセスできますが、前日のデータにどうやってアクセスできますか? インデックスで要素にアクセスするのはうまくいくと思いますが、PHPのインデックスでjson要素にアクセスする方法を理解できませんでした。 私がやろうとしていることをやり遂げる他の方法はありますか? $ JSON = アレイ ( [メタデータ] =>アレイ ( [1.情報] =>デイリー価格(オープン、高、低、近い)とボリューム : 私のJSON返される配列には、以下のようになります。 [2.シンボル] => AAPL [3.最後にリフレッシュ] => 2017年10月16日 [4.出力サイズ] =>コンパクト [5タイムゾーン] =>米国/東 )phpのインデックスでjsonデータにアクセスするには?

[Time Series (Daily)] => Array 
    (
     [2017-10-16] => Array 
      (
       [1. open] => 157.9000 
       [2. high] => 160.0000 
       [3. low] => 157.6500 
       [4. close] => 159.8800 
       [5. volume] => 23894630 
      ) 

     [2017-10-13] => Array 
      (
       [1. open] => 156.7300 
       [2. high] => 157.2800 
       [3. low] => 156.4100 
       [4. close] => 156.9900 
       [5. volume] => 16287608 
      ) 

     [2017-10-12] => Array 
      (
       [1. open] => 156.3500 
       [2. high] => 157.3700 
       [3. low] => 155.7300 
       [4. close] => 156.0000 
       [5. volume] => 16045720 
      ) 

     [2017-10-11] => Array 
      (
       [1. open] => 155.9700 
       [2. high] => 156.9800 
       [3. low] => 155.7500 
       [4. close] => 156.5500 
       [5. volume] => 16607693 
      ) 

     [2017-10-10] => Array 
      (
       [1. open] => 156.0600 
       [2. high] => 158.0000 
       [3. low] => 155.1000 
       [4. close] => 155.9000 
       [5. volume] => 15456331 
      ) 

............など。

+0

キーがリスト型の場合はインデックスでjson配列にアクセスできますが、日付をキーにすると、日付を直接知っているか、foreachループで配列をループする必要があります – catzilla

+0

@catzilla Itあなたがもう少し詳しく説明し、サンプルコード – user45437

+0

を提供できるなら、私は答えを追加しました。 – catzilla

答えて

-1

まず、あなたはあなたがで配列をソートでき、あなたはそれぞれのか、直接値などのために使用し、キーでアクセスすることができた後、その後、同様PHPで

$array->2017-10-16->1. open 
+0

json_decode()を使用しました。結果は上に投稿したjson配列です。日付は毎日変わるので、$ array-> 2017-10-16-> 1を使用してデータにアクセスしたくありません。開いた。代わりに、インデックスで日付にアクセスできるものが必要です。 – user45437

+0

これでforeachを実行すると、array_slice($ json_array、0,3)のようにarray_sliceを試してみてください。foreach($ new_arr as $ values){$ close_values [] = $ value-> 4。閉じる; } print _r($ close_values); – Rits

0

$array = json_decode($json_array,true); 

をJSONをデコードすることができます(私はこれをテストしていない)

0:日付キーは

例配列の最後の要素を取得し、その後(http://php.net/manual/en/function.uksort.php

とを参照してください$json配列は、日付を注文したと仮定すると

<?php 
function cmp($a, $b) 
{ 
    if ($a[1] == $b[1]) return 0; 
    return (strtotime($a[1]) < strtotime($b[1])) ? 1 : -1; 
} 

// order the array by date 
uksort($json, "cmp"); 

end($array);   // move the internal pointer to the end of the array 
$date = key($array); // fetches the key of the element pointed to by the internal pointer 
$values = array_pop($array); // retrieve the last element of the array 

//do it agian for the day before 
end($array);   // move the internal pointer to the end of the array 
$prevDate = key($array); // fetches the key of the element pointed to by the internal pointer 
$prevValues = array_pop($array); // retrieve the last element of the array 

var_dump($date,$prevDate); 
?> 
+0

私は日付を比較する前に、私は日付を知る必要があると思います。どのように日付にアクセスできますか? – user45437

+0

私のコード例を更新しましたか?配列のすべての日付が必要な場合は、array_keys()のような関数を使うことができます。(http://php.net/manual/en/function.array-keys.php) – Tim

0

は、

はキーとしてdateを持っている$jsonアレイにアクセスするにはいくつかのアプローチがあります。

strftimeおよびstrptimeは非常に役に立ちます。

date (string)を受け取り、希望の動きに基づいて変更されたdate (string)を返す日付トラバーサ関数を作成することをお勧めします。例えば

function adjustDate($date, $move) { 
    $dateObject = // uses strptime to create date object from the $date 
    $dateObject += $move; // $move is an integer - to revert back, + to move forward 
    return //strftime -> this should format the date object to the string 
} 

は今$json配列は今、単純な問題でなければなりませんアクセスします。

+0

$ moveの値を決めるパラメータは何ですか?移動は-1でなければならない。前の日付にアクセスします。この作業は火曜日から金曜日の間のみです。ここでは、日付に関する情報にアクセスすることはできません。だから、私たちの動きを決めるパラメータは何ですか? – user45437

関連する問題