get(tableau,"valeur")

6 réponses
Avatar
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

6 réponses

Avatar
Olivier Miakinen
Bonjour,

Le 15/09/2011 17:05, franssoa a écrit :

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



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;
}

C'est pour éviter le message "Undefined variable" sans faire de
'array_key_exists' sur chaque variable d'un POST.



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
Avatar
franssoa
Le 15. 09. 11 18:15, Olivier Miakinen a écrit :
Bonjour,

Le 15/09/2011 17:05, franssoa a écrit :

Je cherche s'il existe l'équivalent de la fonction 'get' de python


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))
...


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.

Voire, en plus compact :


Je ne suis pas fan du code compact. Très amusant à écrire, mais beaucoup
moins amusant à lire 1 ou 2 ans plus tard :-)

Par ailleurs, ceci pourrait aussi t'intéresser :
http://fr2.php.net/manual/fr/book.filter.php


Je ne connaissait pas. Intéressant, je vais approfondir ces fonctions.

Merci
Franssoa
Avatar
Pascal Poncet
Le 15/09/2011 17:05, franssoa a écrit :
Bonjour,



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



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]

C'est pour éviter le message "Undefined variable" sans faire de
'array_key_exists' sur chaque variable d'un POST.



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
Avatar
Olivier Miakinen
Le 16/09/2011 14:40, Pascal Poncet a écrit :

Je cherche s'il existe l'équivalent de la fonction 'get' de python [...]



La question est intéressante et a déjà fait l'objet de demande
d'extensions aux fonctions ou structures de langage PHP :

[réponse avec plein de références, plus opérateur ternaire tronqué]



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
Avatar
Olivier Miakinen
Le 16/09/2011 12:29, franssoa a écrit :

Voire, en plus compact :


Je ne suis pas fan du code compact. Très amusant à écrire, mais beaucoup
moins amusant à lire 1 ou 2 ans plus tard :-)



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
Avatar
Pascal Poncet
Le 17/09/2011 15:33, Olivier Miakinen a écrit :
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.



Yapadekoi !
A charge de revanche,
... avec les expressions rationnelles, par exemple. ;-)

Cordialement,



--
Cordialement,
Pascal