2017-10-17 2 views
0

Dans le tableau suivant JSON retured, je souhaite accéder au prix de clôture des deux dernières dates ($ json ['Time Series (Daily)'] [date] ['4. Close']). Puisque les données sont des prix de l'action, les dates changent chaque jour. Il n'y a pas non plus de données pour les week-ends et les jours fériés. Je suis en mesure d'accéder aux données de la journée en cours, mais comment puis-je accéder aux données de la journée précédente? Je pense que l'accès aux éléments par index fonctionnera, mais je ne pouvais pas comprendre comment accéder aux éléments json par index en php. Existe-t-il un autre moyen de faire ce que j'essaie de faire? Mon tableau retourné JSON se présente comme suit: $ JSON = Tableau ( [Meta Data] => array ( [1. Informations] => Prix quotidiens (ouvert, haut, bas, à proximité) et des volumes [2. Symbole] => AAPL [3. Refreshed Dernière] => 16/10/2017 [4. Taille de sortie] => Compact [5. Time Zone] => US/Eastern )Comment accéder aux données json par index en php?

[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 
      ) 

............ et ainsi de suite

+0

vous pouvez accéder au tableau json par index si la clé est de type liste .. mais avec la date comme clé, soit vous devez connaître directement la date, soit boucler le tableau sur une boucle 'foreach' – catzilla

+0

@catzilla It sera d'une grande aide si vous pouvez élaborer un peu plus et fournir avec l'exemple de code – user45437

+0

J'ai ajouté une réponse, vous pouvez vérifier – catzilla

Répondre

-1

Tout d'abord, vous pouvez décoder le JSON en php comme,

$array = json_decode($json_array,true); 

puis après vous pouvez y accéder par la clé, en utilisant pour chaque ou directement la valeur comme,

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

J'ai utilisé json_decode().Le résultat est un tableau json que j'ai posté ci-dessus. Les dates changeront tous les jours et donc je ne veux pas accéder aux données en utilisant: $ array-> 2017-10-16-> 1. ouvrir. Au lieu de cela, je veux quelque chose par lequel je peux accéder aux dates par index. – user45437

+0

Ohkey alors vous devriez essayer array_slice sur votre tableau comme, array_slice ($ json_array, 0,3) il peut vous donner deux premiers objets puis après que vous pouvez foreach pour cela, foreach ($ new_arr comme $ values) {$ close_values ​​[] = $ value-> 4. Fermer; } print _r ($ close_values); – Rits

0

Vous pouvez trier le tableau par la clés date voir (http://php.net/manual/en/function.uksort.php)

puis récupérer le dernier élément du tableau

Exemple: (je n'ai pas testé ce)

<?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

Je pense avant de comparer les dates, j'ai besoin de connaître les dates. Comment accéder aux dates? – user45437

+0

J'ai mis à jour mon exemple de code, c'est ce que vous vouliez dire? Si vous voulez toutes les dates de votre tableau, vous pouvez utiliser une fonction comme array_keys() voir (http://php.net/manual/fr/function.array-keys.php) – Tim

0

En supposant que le tableau $json ont commandé dates,

Il y a plusieurs approche sur l'accès au réseau $json qui a date comme la clé.

strftime et strptime vous aiderait grandement.

Je recommanderais de créer une fonction de traversée de date qui accepte un date (string) et renvoie un date (string) modifié en fonction du mouvement que vous souhaitez.

par exemple:

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 
} 

maintenant accéder à l'ensemble $json devrait être un simple problème maintenant.

+0

Quel paramètre va décider de la valeur de $ move? Le mouvement doit être -1 ie. accéder à la date précédente. Ce travail seulement entre mardi au vendredi. Et ici, je n'ai pas accès à l'information sur la date. Alors, quel paramètre va décider de notre déménagement? – user45437