Récupération et traitement des valeurs d'un tableau

Signaler
Messages postés
17
Date d'inscription
dimanche 28 août 2005
Statut
Membre
Dernière intervention
25 mars 2011
-
Messages postés
17
Date d'inscription
dimanche 28 août 2005
Statut
Membre
Dernière intervention
25 mars 2011
-
Bonjour à toutes et à tous,

J'ai un petit soucis concernant la récupération de valeurs dans un tableau.
Voici ma démarche : Je récupère les valeurs d'un fichier xml que j'intègre à un tableau (logVisites) construit comme ca :
- visiteur
- visite
- borne
- debutVisite
- Score

A partir de là, je réalise un premier filtre en récupérant juste les résultats du visiteur logger. Et là ca coince.
Il faut que je récupère les bornes visitées (ca c'est bon) et si elle a été visitée plus d'une fois, on doit récupérer le dernier score réalisé en comparant la date (debutVisite) (la ca coince).

J'ai récupérer les valeurs du visiteur voulu dans un nouveau tableau qui est structurée comme suit :

$nomBorne = $logVisite[$i]['interactifId'];
$resultats = $logVisite[$i]['resultats'];
$startAt = strtotime($logVisite[$i]['startAt']);
$dernierScore[$i] = array($nomBorne,$startAt,$resultats);


Voici le tableau en action pour un visiteur logué ayant fait plusieurs interactifs :

Array
(
[1] => Array
(
[nomBorne] => b1
[startAt] => 1295357520
[resultats] => 14
)

[2] => Array
(
[nomBorne] => b3
[startAt] => 1295357520
[resultats] => 24
)

[3] => Array
(
[nomBorne] => b4
[startAt] => 1295357520
[resultats] => 13
)

[4] => Array
(
[nomBorne] => b5
[startAt] => 1295357520
[resultats] => 4
)

[5] => Array
(
[nomBorne] => b5
[startAt] => 1295358120
[resultats] => 15
)

)

Il faut comparer, si la valeur $nomBorne apparait plusieurs fois avec un meme identifiant (string), le dernier score en comparant les valeurs $startAt (numérique).
Je pense que la logique est celle ci mais beaucoup de difficultés à la mettre en forme en php.
Je suis passé par des foreach, for et if mais je n'ai pas réussi a affiché le score de la dernière borne visitée.

Si une personne a un avis, conseil sur la démarche a suivre.

Bonne journée

6 réponses

Messages postés
279
Date d'inscription
mercredi 22 septembre 2010
Statut
Membre
Dernière intervention
8 janvier 2014
3
Sauf erreur de ma part, il suffit de définir un nouveau tableau, indexé par les noms des bornes, ne reprenant que les nouvelles bornes ou bien, dans le cas contraire, leur substituant celles visitées plus récemment ...
$newTab=array();
foreach ($dernierScore as $k=>$v) {
   $brn=$v["nomBorne"];
   if (!isset($newTab[$brn])){
      $newTab[$brn]=array();
      $newTab[$brn]["startAt"]=$v["startAt"]; 
      $newTab[$brn]["resultats"]=$v["resultats"];}
   else if ($newTab[$brn]["startAt"]<$v["startAt"]){
      $newTab[$brn]["startAt"]=$v["startAt"];
      $newTab[$brn]["resultats"]=$v["resultats"];}
}
print_r($newTab);
Messages postés
17
Date d'inscription
dimanche 28 août 2005
Statut
Membre
Dernière intervention
25 mars 2011

C'est tout a fait ça.

Merci pour l'aide.
Bonne journée
Messages postés
17
Date d'inscription
dimanche 28 août 2005
Statut
Membre
Dernière intervention
25 mars 2011

En fait j'ai pas totalement résolu le problème.
Le code fonctionne bien, mais me retourne pas la bonne borne.
Voici mon code :

for ($i=1; $i<=$k; $i++) {
//listing des bornes déjà vues
if ($visiteur == $logVisite[$i]["visiteur"])
{
$nomBorne = $logVisite[$i]['interactifId'];
$resultats = $logVisite[$i]['resultats'];
$startAt = strtotime($logVisite[$i]['startAt']);
$dernierScore[$i] = array('nomBorne'=>$nomBorne,'startAt'=>$startAt,'resultats'=>$resultats);
}
else  echo 'Aucunes bornes visitées';
}
if($interactif == $nomBorne) {
//Récupérer le dernier score de la borne du joueur
$newTab=array();
foreach ($dernierScore as $k=>$v) {
   $brn=$v["nomBorne"];
   if (!isset($newTab[$brn])){
  $newTab[$brn]=array();
  $newTab[$brn]["startAt"]=$v["startAt"]; 
  $newTab[$brn]["resultats"]=$v["resultats"];}
   else if ($newTab[$brn]["startAt"]<$v["startAt"]){
  $newTab[$brn]["startAt"]=$v["startAt"];
  $newTab[$brn]["resultats"]=$v["resultats"];}
}
}
echo'Nous sommes sur la borne '.$brn.' et la dernière visite du joueur '.$visiteur.' a eu lieu le '.$newTab[$brn]["startAt"]. ' et a pour score '.$newTab[$brn]["resultats"].'';


Une piste, je commence a me perdre dans ce code.
Merci par avance
Messages postés
279
Date d'inscription
mercredi 22 septembre 2010
Statut
Membre
Dernière intervention
8 janvier 2014
3
Mon code retourne un tableau indexé par les bornes visitées.

Le code adopté affiche, en dernière ligne, la dernière borne figurant plusieurs fois dans la boucle. Indépendamment du fait qu'elle risque de ne pas être définie, cette borne n'a aucune raison d'être la bonne !

Encore conviendrait-il de savoir qu'elle est la bonne ?
Si c'était la plus récente, il conviendrait de la récupérer dans la boucle précédente...
Messages postés
17
Date d'inscription
dimanche 28 août 2005
Statut
Membre
Dernière intervention
25 mars 2011

J'ai bien la borne en question que je récupère dans le fichier XML contenu dans la variable $interactif. Si cette dernière vaut l'une des bornes vues par le visiteur alors on récupère les éléments de la dernière visite.
Messages postés
17
Date d'inscription
dimanche 28 août 2005
Statut
Membre
Dernière intervention
25 mars 2011

Je continue sur ce post car c'est dans la même lignée.
La dernière fois, je souhaitais vérifier que la borne sur laquelle j'étais.
Maintenant j'aimerais effectuer cette action sur un ensemble de bornes données. Et là je bloque. J'ai fait un for pour lister l'ensemble des bornes et ainsi faire la vérification mais en vain. Quelle boucle effectuer sachant que j'ai a travailler sur ce tableau qui contient le nom des bornes : $dernierScore[$i] = array('nomBorne'=>$nomBorne,'startAt'=>$startAt,'resultats'=>$resultats);

//Récupérer les derniers scores de l'ensemble des bornes du joueur
$newTab=array();
foreach ($dernierScore as $k=>$v) {
   $brn=$v["nomBorne"];
   if (!isset($newTab[$brn])){
  $newTab[$brn]=array();
  $newTab[$brn]["startAt"]=$v["startAt"]; 
  $newTab[$brn]["resultats"]=$v["resultats"];}
   else if ($newTab[$brn]["startAt"]<$v["startAt"]){
  $newTab[$brn]["startAt"]=$v["startAt"];
  $newTab[$brn]["resultats"]=$v["resultats"];}
}


Bonne journée