get(tableau,"valeur")
Le
franssoa

Bonjour,
Je cherche s'il existe l'équivalent de la fonction 'get' de python en
php qui, traduit en php, donnerait quelque chose comme :
$tb = array("vert"=>"green","noir"=>"black");
print get($tb,"vert","inconnu");
->green
print get($tb,"rouge","inconnu");
->inconnu
C'est pour éviter le message "Undefined variable" sans faire de
'array_key_exists' sur chaque variable d'un POST.
Franssoa
Je cherche s'il existe l'équivalent de la fonction 'get' de python en
php qui, traduit en php, donnerait quelque chose comme :
$tb = array("vert"=>"green","noir"=>"black");
print get($tb,"vert","inconnu");
->green
print get($tb,"rouge","inconnu");
->inconnu
C'est pour éviter le message "Undefined variable" sans faire de
'array_key_exists' sur chaque variable d'un POST.
Franssoa
Le 15/09/2011 17:05, franssoa a écrit :
Je ne sais pas si la fonction existe en natif, mais tu peux toujours
l'écrire :
function get($tb, $key, $dflt)
{
if (array_key_exists($key, $tb))
return $tb[$key]
else
return $dflt;
}
Voire, en plus compact :
function get($tb, $key, $dflt)
{
return (array_key_exists($key, $tb)) ? $tb[$key] : $dflt;
}
Pour le cas spécifique des données provenant de l'extérieur, tu peux
même spécialiser la fonction :
function getext($key, $dflt)
{
return (array_key_exists($key, $_REQUEST)) ? $_REQUEST[$key] : $dflt;
}
Par ailleurs, ceci pourrait aussi t'intéresser :
http://fr2.php.net/manual/fr/book.filter.php
Cordialement,
--
Olivier Miakinen
Oui c'est ce que je fait pour l'instant, je me demandais simplement si
ça n'existait pas en natifpour ne pas ré-inventer la roue et/ou alourdir
le code.
Je ne suis pas fan du code compact. Très amusant à écrire, mais beaucoup
moins amusant à lire 1 ou 2 ans plus tard :-)
Je ne connaissait pas. Intéressant, je vais approfondir ces fonctions.
Merci
Franssoa
Bonjour,
La question est intéressante et a déjà fait l'objet de demande
d'extensions aux fonctions ou structures de langage PHP :
- en 2005 avec ifsetor()
[http://www.php.net/~derick/meeting-notes.html#ifsetor-as-replacement-for-foo-isset-foo-foo-something-else]
- en 2007 avec array_get()
[http://marc.info/?l=php-internals&m8946242013246&w=2]
Hélas, il n'en ressort pas grand chose, pour l'instant.
Si ce n'est l'usage possible de l'opérateur ternaire amputé de sa partie
centrale, depuis la version 5.3 :
[http://www.php.net/manual/fr/language.operators.comparison.php#language.operators.comparison.ternary]
Une possibilité, peut-être pas super propre, serait de combiner le
ternaire amputé avec le mode silencieux :
<?php
$couleurs = array(
'vert' => 'green',
'noir' => 'black'
);
echo @$couleurs['vert'] ?: 'default'; // green
echo @$couleurs['rouge'] ?: 'default'; // default
?>
--
Cordialement,
Pascal
Merci de ta réponse, c'est très instructif. En particulier tu m'apprends
l'existence de l'opérateur ternaire amputé de sa partie centrale.
Cordialement,
--
Olivier Miakinen
C'est bien pour ça que je ne l'ai pas proposé tout seul. Pour ma part,
je trouve l'opérateur ternaire tout aussi facile à lire que des if,
voire parfois plus facile à lire, mais je conçois que ce soit moins
lisible pour ceux qui n'en ont pas l'habitude.
Cordialement,
--
Olivier Miakinen
Yapadekoi !
A charge de revanche,
... avec les expressions rationnelles, par exemple. ;-)
--
Cordialement,
Pascal