8768 sujets

Développement web côté serveur, CMS

Bonjour à tous,
J'ai un array tout ce qu'il y a de plus simple :


Array
(
    [0] => Robert Jonhson

)


je veux juste faire :


if(in_array($user, $parts_table)){
	echo $user.' est inscrit';
}


Évidemment vous aurez compris que $user = Robert Jonhson;
et que l'array en question se nomme $parts_table;
Il ne me trouve jamais la valeur "Robert Jonhson"

Pour contextualiser un peu le problème le contenu du tableau est tiré d'un custom field wordpress contenant une liste de nom séparée par "&" que j'explode pour en faire un array et dans cet array je cherche donc la valeur Robert Jonhson. (oui oui avec un espace entre nom et prénom)

$user est la concaténation du nom + ' ' + prenom de l'utilisateur en cours.

Merci de votre aide car sur ce coup je me sens...... Très.... c**
Modifié par Soxy95 (31 Dec 2016 - 16:16)
Bonsoir.

La fonction in_array fonctionne... si je ne définis pas le tableau de la même façon que vous... (mais je suis à la version 5.3.8 de PHP alors...)

Donc ça marche si :
$pars_table = array('Robert Jonhson');


ou :
$pars_table = array('0' => 'Robert Jonhson');


Mais, si le tableau est le résultat d'un explode, alors...

Ensuite, à ce que je sache :
Soxy95 a écrit :
$user est la concaténation du nom + ' ' + prenom de l'utilisateur en cours.

+ ne concatène qu'en Javascript... Mais il est possible que ce soit devenu possible en PHP...

Smiley smile
Modérateur
Bonsoir,

pour trouver le problème, qui n'est pas in_array, il faut tester les variables qui lui sont passées.

à l'endroit ou est effectué le in_array, un print_r ou var_dump de $user et $pars_table devraient donner la réponse.
Zelena a écrit :


Mais, si le tableau est le résultat d'un explode, alors...

Ensuite, à ce que je sache :

+ ne concatène qu'en Javascript... Mais il est possible que ce soit devenu possible en PHP...

Smiley smile


Ouiiiiiiiiii le "+" est plus visible que le ".".

Zelena a écrit :

à l'endroit ou est effectué le in_array, un print_r ou var_dump de $user et $pars_table devraient donner la réponse.



$parts_table est bien un array avec une valeur string "Robert Jonhson" à l'indice 0
et $user est bien une chaîne string "Robert Jonhson"....

Pour ceux que ça pourrait inspirer voilà le morceau complet



$user = $prenom[0]. ' ' . $nom[0]; // Concaténation de deux champs de la base user,
$events = get_posts($args); //Requête wordpress qui sort un objet
$i=0; 
	foreach ($events as $event) { // Je boucle dans $events
		$date_start = get_post_meta($event->ID);  
		if(get_field('participants', $event->ID)){ // Je vérifie qu'il y a quelque chose dans le champs "Participants" de mon array $event
			$parts = get_field('participants', $event->ID);
			$parts_table = explode('&', $parts); // Le contenu du champs "particpants" qui était une chaine j'en fait un array;
			if(in_array($user, $parts_table)){  // Et tadaaam ! c'est là que le drame se produit il ne trouve pas $user dans mon array (alors qu'il y est ! ) 
				echo '<br>-'.$i.'- Ca passe pour num-'.$event->ID.'<br>';
				echo $date_start['event_start_date'][0].'<br>';
				//echo 'Vous êtes inscrit à l\'&eacute;v&eacute;nement :'.get_the_title($event->ID). ' le ' . date('d/m/Y H:m',strtotime($date_start['event_start_date'][0]));
					 	}
					 	$i++;
				 	}

Modifié par Soxy95 (31 Dec 2016 - 17:40)
Modérateur
Et pourtant, il suffit de tester le code suivant pour voir que ça fonctionne:


$user = 'Robert Jonhson';
$parts_table = array('Robert Jonhson');
var_dump($parts_table);
var_dump($user);
var_dump(in_array($user, $parts_table));

Le problème peut donc être: Le contenu des variables est différent. Ou alors la condition est bien exécutée mais on ne le remarque pas à cause d'un autre problème dans le code (arrêter le code juste après le code peut aider à s'en rendre compte, à l'aide de die() par exemple).