2009-11-30 6 views
2

Existe-t-il un moyen d'utiliser l'opérateur PHP => (?) Sans utiliser le array() "constructeur"?PHP: using => opérateur sans tableau

Pour être précis, je veux créer une fonction qui va obtenir une liste des clés et des valeurs sans l'emballer dans un tableau:

function keysAndValues($items) { 
    /* ... */ 
} 

keysAndValues(
    'key1' => 'value1', 
    'key2' => 'value2', 
    'key3' => 'value3' 
); 

Au lieu de

keysAndValues(array(
    'key1' => 'value1', 
    'key2' => 'value2', 
    'key3' => 'value3' 
)); 

est-il un moyen pour faire ça?

+0

Je sais que vous avez déjà accepté une réponse, mais je me suis lancé dans une pseudo solution. –

+0

Ca ne marchera que pour les cordes, j'ai souhaité une solution plus polyvalente. – LiraNuna

+0

Une liste de paires de valeurs clés * est * en fait un tableau, (au moins en PHP) alors quel serait le problème de les encapsuler dans un tableau? Je veux dire, si l'interpréteur PHP implémente la syntaxe que vous proposez, il est très probable qu'il l'implémente comme un tableau ordinaire en vous évitant de taper 'array()' de toute façon – Petruza

Répondre

4

Ce sont des arguments nommés. Non, pas possible en PHP. Vous devrez envelopper un tableau() autour d'eux.

Si ce n'est pas le tableau qui vous tracasse, mais le fait que vous devez travailler avec un tableau dans la fonction, essayez

function my_function($array) 
{ 
extract($array); 
... 
if (isset($number)) echo "Number is: ".$number; 
} 

pour déballer les options dans le périmètre de la fonction:

my_function(array("number" => "one")); // Will output "Number is: one" 

il sauve les tracas de les déballer un par un en utilisant foreach().

+0

Arguments nommés! c'est celui-là. Cela m'a amené dans ce rapport de bug http://bugs.php.net/bug.php?id=22216 qui dit que l'équipe de développement PHP l'a refusé. Je vous remercie. – LiraNuna

+0

'Si ce n'est pas le tableau qui vous dérange' - en fait c'est le cas, car mon but est un type de classe de dictionnaire. Je me demandais s'il y avait un meilleur moyen d'envoyer des variables au constructeur. – LiraNuna

0

bien, en particulier, l'opérateur '=>' dénote la clé, paire de valeur insid e un tableau, donc il n'y a vraiment aucune raison de l'utiliser en dehors du constructeur du tableau.

Cela dit, il est utilisé à l'intérieur des choses comme une boucle « foreach » pour saisir la clé et la valeur pour chaque élément dans un tableau

foreach ($arr as $key=>$val) 
1

La chose la plus proche, vous pouvez obtenir ce que vous voulez est à l'aide arguments dynamiques.

En utilisant this tutorial/overview comme base, ici est un hack pour fournir une solution potentielle:

function keysAndValues() { 
    for($i = 0 ; $i < func_num_args(); $i++) { 
     list($key, $value) = explode('=>', func_get_arg($i)); 
     // Do something with the $key and $value 
    } 
} 

Il serait alors appelé comme ceci:

keysAndValues('key1=>value1','key2=>value2','key3=>value3'); 
keysAndValues('key1=>value1'); 

Fondamentalement, vous pouvez avoir un montant de paramètres ... ils sont dynamiques!

+2

Wow, c'est hacky. Le plus gros problème avec ceci est que vous ne pourrez passer que des chaînes, qui ne peuvent même pas contenir ''=>' '. Il serait préférable (et moins de code) d'utiliser simplement des tableaux ici. Nice hack cependant. : oP – deceze

+1

Haha .. c'est sûr :) Cependant, il a énuméré toutes ses clés comme des chaînes ...donc tant qu'ils ne contiennent pas '=>' –