Page 1 sur 1

naviguer dans un array()

Posté : 10 nov. 2008, 12:37
par toony.m
Bonjour,

J'ai une chaine contenant des nombre de 1 à 5 chiffres séparés par des ;
ex:
$chaine = ;123;65498;4;6548;5499;65487;
Je cherche un moyen pour retrouver la portion de caractère avant et après un des ces nombres.
Ex:
Si $recherche=6548, $precedent=4 et $suivant=5499

J'ai pensé explosé ma chaine en tableau:
$tableau = explode(';', $chaine);

Mais comment retrouver la ligne n-1 et n+1 dans un tableau si je connais une valeur ?

Re: naviguer dans un array()

Posté : 10 nov. 2008, 13:42
par Calimero
Bonjour,

C'est à peu près aussi facile à faire qu'à dire :
$chaine = ";123;65498;4;6548;5499;65487;";

$compare="6548";
$tableau = explode(';', $chaine);

// On parcourt le tableau
foreach($tableau as $index=>$valeur){
  // On cherche une égalité avec une valeur donnée pour l'élément courant
  if($valeur==$compare){
    // Si oui, on affecte les variables
    $precedent=$tableau[$index-1];
    $suivant=$tableau[$index+1];
    break;
  }
}
Le code est prêt à l'emploi à un détail près : si la valeur recherchée est située à une extrêmité du tableau, la valeur "precedent" ou "suivant" peut ne pas exister du tout : il faut juste gérer ces deux possibilités :-)

Autre façon de faire, tu peux aussi utiliser array_search()

Posté : 10 nov. 2008, 14:15
par stopher
Pour illustrer la réponse de Calimero avec array_search() :
$chaine = ";123;65498;4;6548;5499;65487;";

$compare="6548";
$tableau = explode(';', $chaine);

if (in_array($compare,$tableau))
{
	(string)$precedent	=	"none";
	(string)$suivant	=	"none";
	(int)$key	=	array_search($compare,$tableau);
	if($key-1>=0)
	{
		$precedent	=	$tableau[$key-1];
	}
	
	if($key+1<=count($tableau))
	{
		$suivant	=	$tableau[$key+1];
	}
}

echo "Resultat<br>$precedent < $compare < $suivant <br>";
bonne continuation ...

cdt,
Christophe.

Posté : 10 nov. 2008, 15:06
par Invité
Merci beaucoup! :D

Posté : 11 nov. 2008, 00:02
par albat
Modération :
toony.m, si ta question est résolue, pense à ajouter le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.
Tu peux réaliser cette opération en cliquant sur le bouton Image en haut à gauche de ce sujet.