in_array multidimensionnel

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : in_array multidimensionnel

par AB » 03 juin 2008, 18:17

oui effectivement, ça marche bien. mais vu que in_array a un foreach "intégré" pour parcourir un tableau, je me demande si c'est possible de faire la même chose sur les sous tableaux: ne pas utiliser de foreach.
Tel que tu le demande la réponse est non. On ne peut pas passer de praramètre à in_array() pour lui indiquer de chercher sur plusieurs niveaux. Comme l'indique la doc http://fr2.php.net/in_array in_array — Indique si une valeur appartient à un tableau (que cette valeur soit elle-même un tableau ou non)

Donc, comme mentionné dans les messages précédents, il faudra passer par une fonction qui liste ton tableau (foreach...) ou qui applique une fonction sur chacun des éléments de ton tableau.

par FredoMkb » 03 juin 2008, 14:51

Bonjour :)

Voici quelques pistes... mais :shock:

1. Si on connaît d'avance les différentes sous-listes à tester :
$tab[0] = array(1, 2, 3); 
$tab[1] = array(3, 4, 5); 
$tab[3] = array(6, 7, 8);

$tst = 3;
echo (int)in_array($tst, array_merge($tab[0], $tab[1], $tab[3])); // 1

/* ----- */

$tst = 12;
echo (int)in_array($tst, array_merge($tab[0], $tab[1], $tab[3])); // 0

2. Sans connaître d'avance les différentes sous-listes et sans utiliser 'foreach' :
$tab[0] = array(1, 2, 3); 
$tab[1] = array(3, 4, 5); 
$tab[3] = array(6, 7, 8);

$tst = 3;
$res = 0;

function inArray($arr, $key) {
	global $tst, $res;
	if (in_array($tst, $arr)) { $res = 1; }
}
array_walk($tab, 'inArray');
echo $res; // 1

/* ----- */

$tst = 12;
echo $res; // 0

3. Sans connaître d'avance les différentes sous-listes et avec un 'foreach' :
$tab[0] = array(1, 2, 3); 
$tab[1] = array(3, 4, 5); 
$tab[3] = array(6, 7, 8);

$tst = 3;
$res = 0;

foreach ($tab as $key => $val) {
	if (in_array($tst, $val)) { $res = 1; }
}

echo $res; // 1

/* ----- */

$tst = 12;
echo $res; // 0
Ces codes peuvent bien-sûr être optimisés le cas échéant...

Je disais "mais" en préambule, en effet, parfois les solutions alternatives sont finalement moins intéressantes que la solution de base, en tout cas en ce qui concerne les pistes que je viens de proposer... à voir donc l'utilité selon l'utilisation... :shock: :D

à+ :)

par Invité » 03 juin 2008, 11:38

oui effectivement, ça marche bien. mais vu que in_array a un foreach "intégré" pour parcourir un tableau, je me demande si c'est possible de faire la même chose sur les sous tableaux: ne pas utiliser de foreach.

par guilt92 » 03 juin 2008, 10:53

As tu essayé d'utiliser in_array() avec $tab[0] comme variable ?

Cela devrait fonctionner sans problème.

Il suffit de passer comme élément un tableau à in_array(), donc $tab[0],$tab[1]...

Ainsi avec une combinaison de foreach() sur $tab et de in_array() sur les valeurs du tableau tu devrais pouvoir chercher sans problème...

in_array multidimensionnel

par Invité » 03 juin 2008, 10:42

Bonjour,
J'ai le tableau suivant:
$tab[0] = array(1, 2, 3);
$tab[1] = array(3, 4, 5);
$tab[3] = array(6, 7, 8);
Est-il possible d'utiliser in_array pour savoir si une valeur se trouve dans l'un des sous tableaux?
Merci pour vos réponses.