GNT sans publicité, site mobile, fonctionnalitées exclusives...

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

Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Olivier Miakinen
Le #23763251
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
franssoa
Le #23765781
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
Pascal Poncet
Le #23766271
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/langua...on.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
Olivier Miakinen
Le #23769681
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
Olivier Miakinen
Le #23769741
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
Publicité
Suivre les réponses
Poster une réponse
Anonyme