Chercher dans les parametres d'un tableau

rimie1
Invité n'ayant pas de compte PHPfrance

04 mai 2011, 05:01

Bonjour,

Comment puis je chercher si le mot autocomplete est dans formOptionsArray, de meme pour on et off:
$formOptionsArray = array("autocomplete" => array('on', 'off'));

Merci

ViPHP
xTG
ViPHP | 7331 Messages

04 mai 2011, 07:53

if( array_key_exists("autocomplete", $formOptionsArray) === true )
{
  echo "autocomplete présent";
  if( array_seach("on",$formOptionsArray['autocomplete']) === true )
    echo "on présent";
  if( array_seach("off",$formOptionsArray['autocomplete']) === true )
    echo "off présent";
}

Eléphant du PHP | 275 Messages

04 mai 2011, 11:02

Ou sinon :
$autocompleteActivated =  isset($formOptionsArray['autocomplete']) && $formOptionsArray['autocomplete'] == 'on';

ViPHP
ViPHP | 2577 Messages

04 mai 2011, 11:55

Bonjour,

Pour le stockage des infos, je préfère la solution dans le genre :
$formOptionsArray['autocomplete']['on'] = '';
$formOptionsArray['autocomplete']['off'] = '';
(pas sur de la syntaxe pour les tableaux à 2 dimensions)

Cela permet un test facile avec isset($formOptionsArray['autocomplete']['on'])

Eléphant du PHP | 275 Messages

04 mai 2011, 11:57

T'aime les trucs compliqués toi non ?

Tant qu'a changer les données, pourquoi pas $formOptionsArray['autocomplete'] = true / false ?

Comme ça, c'est juste :
if ($formOptionsArray['autocomplete']) {
[...]
}
Ou encore :
if (isset($formOptionsArray['autocomplete']) && $formOptionsArray['autocomplete']) {
[...]
}

ViPHP
ViPHP | 2577 Messages

04 mai 2011, 12:08

Bonjour,

C'est une habitude que j'ai prise de mettre une donnée dans la clé d'un tableau lorsque la clé naturelle n'a pas d'importance. Cela permet un test rapide et simple d'existence et garantie l'unicité sans effort.

J'utilise ca pour des listes de fichiers css ou javascript ou des listes de mots clés. Pour le parcours, je fais un foreach ($tab as $valeur=>$bidon) au lieu du foreach ($tab as $valeur)

ViPHP
xTG
ViPHP | 7331 Messages

04 mai 2011, 13:37

Je fais aussi comme Mazarini, c'est bien plus rapide qu'une recherche via in_array() ou autre.

Quant à ce que tu proposes popy le souci est que c'est un array de configuration qu'utilise l'auteur de ce topic. Ce n'est pas un array de présentation des données.
En gros une liste des valeurs que peut prendre l'option.

Eléphant du PHP | 275 Messages

04 mai 2011, 14:53

Sauf que la, il n'y a aucun in_array...

ViPHP
ViPHP | 2577 Messages

04 mai 2011, 15:03

Mais un array_search

Au passage, j'ai un doute sur array_search() === true car array_search() retourne un indice. Ne serai ce pas plutôt array_search() !== false ?

rimie1
Invité n'ayant pas de compte PHPfrance

05 mai 2011, 04:13

avec multitudes reponses, je ne sais pas laquelle est bonne pour mon cas, ici j'ajoute d'autres options:
$formOptionsArray = array(
		"autocomplete" => array('on', 'off'), 
		"target" => array('_self', '_blank', '_parent', '_top'), 
		"novalidate" => "novalidate",
		"DISABLED"
		);

ViPHP
ViPHP | 928 Messages

05 mai 2011, 04:48

Ou sinon :
$autocompleteActivated =  isset($formOptionsArray['autocomplete']) && $formOptionsArray['autocomplete'] == 'on';
Je rebondi sur ce message pour préciser que le coup du isset() sur les clefs de tableau est une mauvaise habitude qui peut dans certains cas causer des problèmes pénibles, en effet pour peu que la valeur associée à cette clef soit nulle, isset() retournera false. Mieux vaut donc utiliser array_key_exists() qui est LA fonction faîte pour tester l'existence d'une clef dans un tableau :)

Petit test :
$a = array('titi' => 1, 'toto' => null);
var_dump(isset($a['titi']), isset($a['toto']));
affiche

Code : Tout sélectionner

bool(true) bool(false)

rimie1
Invité n'ayant pas de compte PHPfrance

05 mai 2011, 05:16

Oui Genova, vous avez raison, je l'ai lu au manuel:
Example #2 array_key_exists() vs isset()
isset() does not return TRUE for array keys that correspond to a NULL value, while array_key_exists() does.

ViPHP
xTG
ViPHP | 7331 Messages

05 mai 2011, 08:00

@Genova : c'est pour cela que je n'utilise la valeur null qu'en cas de variable non initialisé dans tous mes programmes. Ainsi le résultat du isSet() est tout à fait correct. Je tombe sur une variable non initialisée qui n'existe donc pas.

ViPHP
ViPHP | 2577 Messages

05 mai 2011, 08:14

Bonjour,

Si tu ne sais que choisir, une adaptation de la première solution me semble bonne :
function test($nom,$option)
{
   global $formOptionsArray;
   if( array_key_exists($nom, $formOptionsArray) === true )
  {
     if( array_seach($option,$formOptionsArray[$nom]) === true )
     {
         return true;
     }
  }
  return false;
}
Ceci en gardant ta structure de données.

rimie1
Invité n'ayant pas de compte PHPfrance

06 mai 2011, 04:23

j'ai teste l'exemple de xTG et ca marche pas, il affiche:

+ autocomplete present,
+ on n'est pas present.
if( array_key_exists("autocomplete", $formOptionsArray) === true )
{
  echo "autocomplete présent<br>";
  if(array_search("on",$formOptionsArray['autocomplete']) === true )
  {
  	echo "on présent<br>";
  }
  else
  {
  	echo "n'est pas présent<br>";
  }
    
  if( array_search("off",$formOptionsArray['autocomplete']) === true )
    echo "off présent<br>";
}