webForumDet fria alternativet

Konvertera array till variabler och skicka in i "dynamisk" funktion

PHP

3 svar · 339 visningar · startad av learn

Medlem sedan jan. 20051 130 inlägg
Frågan#1

Ett klurig problem jag hoppas någon kan hjälpa mig med :)

Jag har en array med ett antal värden (antalet värden vet jag inte i förhand).

Exempel:

$min_array = array('one' => 'ett', 'two' => 'två');

Nu vill jag skicka in dessa värden som variabler i en funktion (som jag inte vet namnet på i förhand).

Exempel:

$functionName = 'min_funktion';

echo $functionName($one, $two);

function min_funktion($one, $two)
{
    return "Jag kan räkna $one, $two...";
}

Ovanstående skall alltså skriva ut:

Jag kan räkna ett, två...

Det jag behöver göra är alltså:

1. Konvertera array-värdena till variabler
2. Skicka in dem i funktioner
(Observera att jag inte vet hur många värden/variabler det blir...)

Hur gör jag detta?

Tack på förhand! :bire

Medlem sedan mars 20007 896 inlägg
#2

Det är ju ett typexempel på när en array egentligen ska användas, så jag förstår inte varför du behöver dom som variabler. Men, men.

Använd extract():

$myArray = array('one' => 'ett', 'two' => 'två');
extract($myArray);
echo $one;
echo $two;
Medlem sedan jan. 20051 130 inlägg
#3

Tack, skön funktion! Anledningen är att behöver göra på det sättet är att funktionerna i fråga även används på "vanligt" sätt när jag vet vad som ska skickas in i dem.

Bra, nu har jag värdena som variabler. Hur skickar jag med dem som argument till min funktion? Lite klurigt eftersom jag inte vet hur många dem är...

Det här funkar ju inte... ;)

$functionName(foreach($vars as $var) { $var })
{
    //...
}

Tips?

Medlem sedan mars 20007 896 inlägg
#4

Titta på call_user_func() och func_get_args(). Men det finns inget vettigare än att helt enkelt skicka in arrayen som parameter (och sedan möjligtvis använda extract där). Men du kommer alltid ha problemet att du inte vet hur många eller vilka variabler som existerar - så antingen har du något generalknas i din systemdesign eller så är du ute på mycket djupt vatten...

258 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)