Jak funkci předat parametry uložené v poli?

Matěj

Jak funkci předat parametry uložené v poli?
« kdy: 23. 01. 2018, 00:43:27 »
Ahoj,
když mám takový pole
Kód: [Vybrat]
$arr = ('a'=>'A', 'b'=>'B','c'=>'C'); //Jen nástřel, jedna se o velký polea potřebuji zavolat funkci a předat 4 parametry
Kód: [Vybrat]
zavolej_funkci('A','B','C');zkoušel jsem to takto
Kód: [Vybrat]
$var = implode (',', $arr);a pak takto
Kód: [Vybrat]
zavolej_funkci($var);abych ve funkci měl samostatný parametry v proměných
Kód: [Vybrat]
function zavolej_funkci($a,$b,$c){
...
}
ale nejde to, proměnná $a v tý funkci obsahuje všechno a ostatní nic. Nějaký nápad? Jedná se o php.


Kit

Re:Jak funkci předat parametry uložené v poli?
« Odpověď #1 kdy: 23. 01. 2018, 00:55:32 »
Předej té funkci celé pole, ať si funkce sama vybere, co z toho chce.

Kit

Re:Jak funkci předat parametry uložené v poli?
« Odpověď #2 kdy: 23. 01. 2018, 01:08:38 »
Řešení původního zadání
Kód: [Vybrat]
<?php
$arr 
= array('a'=>'A''b'=>'B''c'=>'C');
zavolej($arr['a'], $arr['b'], $arr['c']);

function 
zavolej($a$b$c) {
...
}

Mé oblíbené řešení v jiném stylu, které je o něco rychlejší a přehlednější:
Kód: [Vybrat]
<?php
$arr 
= array('a'=>'A''b'=>'B''c'=>'C');
zavolej($arr);

function 
zavolej($arr) {
...
}

Matěj

Re:Jak funkci předat parametry uložené v poli?
« Odpověď #3 kdy: 23. 01. 2018, 01:30:58 »
Nechám si poradit, akorát nevím, jestli je to dobře i v tom případě, že to pole má x-set položek, lepší by byla databáze ale není mno.

Kit

Re:Jak funkci předat parametry uložené v poli?
« Odpověď #4 kdy: 23. 01. 2018, 05:04:24 »
Nechám si poradit, akorát nevím, jestli je to dobře i v tom případě, že to pole má x-set položek, lepší by byla databáze ale není mno.

Stovky položek nepředstavují problém, protože to pole se stejně předává odkazem. Spíš je otázkou, zda funkce zavolej() má z něj brát pokaždé hodnoty se stejnými indexy nebo ne.

Možná by bylo rozumné to přepsat do objektu a z funkce zavolej() udělat metodu bez parametru. Nedávno jsem podobným stylem dělal s atributy IPTC.


Matěj

Re:Jak funkci předat parametry uložené v poli?
« Odpověď #5 kdy: 23. 01. 2018, 11:41:20 »
Indexy jsou odlišné. Mám přepsat pole na objekt? Jak to myslíš? Že mám dát to pole do třídy?

crabik

Re:Jak funkci předat parametry uložené v poli?
« Odpověď #6 kdy: 23. 01. 2018, 12:39:13 »
existuje call_user_func_array('funkce', $pole), každopádně ti index 'a', který máš v tom poli, nepůjde do argumentu $a ve funkci. Všechny ty indexy se ignorují a bere se jen jejich pořadí, php obecně nebere v potaz názvy argumentů, jen jejich pořadí.

Kód: [Vybrat]
<?php
$arr 
= array('je'=>'A''to'=>'B''jedno'=>'C');
call_user_func_array('zavolej'$arr);

function 
zavolej($a$b$c) {
...
}

Uvnitř funkce můžeš zavolat func_get_args(), které ti vrátí pole argumentů, takže argumenty vůbec nemusíš zadávat.

Kód: [Vybrat]
<?php
$arr 
= array('je'=>'A''to'=>'B''jedno'=>'C');
call_user_func_array('zavolej'$arr);

function 
zavolej() {
    
$argumenty func_get_args(); // vrátí array(0 => 'A', 1 => 'B', 2 => 'C')
}

Každopádně není důvod si nepředat do funkce celé pole. Dokud to pole nějakým způsobem nezměníš, tak se nevytváří kopie. Pokud to pole uvnitř funkce měníš a chceš tu změnu zachovat i pro tu původní proměnnou, tak můžeš použít referenci.

Kód: [Vybrat]
<?php
$arr 
= array('a'=>'A''b'=>'B''c'=>'C');
zavolej($arr);
var_dump($arr); // vrátí array('a'=>'A', 'b'=>'B', 'c'=>'C', 'd' => 'D');

function zavolej(&$arr) {
  
$arr['d'] = 'D';
}

Matěj

Re:Jak funkci předat parametry uložené v poli?
« Odpověď #7 kdy: 23. 01. 2018, 12:49:52 »
Děkuji za info, a jak to udělat aby to byl objekt? Přeci se s tím líp pracuje jako s polem.

crabik

Re:Jak funkci předat parametry uložené v poli?
« Odpověď #8 kdy: 23. 01. 2018, 13:06:58 »
Nevím, co je cílem a jakým stylem má aplikace fungovat. Objekty používej, pokud programuješ objektově.

Kit

Re:Jak funkci předat parametry uložené v poli?
« Odpověď #9 kdy: 23. 01. 2018, 13:26:20 »
Nevím, co je cílem a jakým stylem má aplikace fungovat. Objekty používej, pokud programuješ objektově.

Objekty se běžně používají i při strukturovaném programování.

crabik

Re:Jak funkci předat parametry uložené v poli?
« Odpověď #10 kdy: 23. 01. 2018, 13:47:28 »
Objekty se běžně používají i při strukturovaném programování.

Tak je používej, pokud programuješ objektově nebo strukturovaně. Jestli mít něco v poli nebo to obalit objektem, to je otázkou kontextu. Rozdíl je totiž pouze ve stylu práce.

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Jak funkci předat parametry uložené v poli?
« Odpověď #11 kdy: 23. 01. 2018, 16:09:03 »
Stovky položek nepředstavují problém, protože to pole se stejně předává odkazem.

Nepředávají. Odkazem se předávají jen objekty.

Kit

Re:Jak funkci předat parametry uložené v poli?
« Odpověď #12 kdy: 23. 01. 2018, 16:44:11 »
Stovky položek nepředstavují problém, protože to pole se stejně předává odkazem.

Nepředávají. Odkazem se předávají jen objekty.

Pole se v PHP kopíruje líně, tedy až v okamžiku, kdy ho začneš modifikovat, což se běžně nedělá. Výkon tím tedy nijak netrpí.

Pennis Fitchie

Re:Jak funkci předat parametry uložené v poli?
« Odpověď #13 kdy: 23. 01. 2018, 22:56:51 »
Hoši že se na to PHPčko nevyserete a nenaučíte se raději C, které je jednodušší a výsledný program tak 1000x rychlejší.

Kit

Re:Jak funkci předat parametry uložené v poli?
« Odpověď #14 kdy: 23. 01. 2018, 23:24:06 »
Hoši že se na to PHPčko nevyserete a nenaučíte se raději C, které je jednodušší a výsledný program tak 1000x rychlejší.

Ano, PHP napsali programátoři v C. My ctíme jejich práci a proto PHP používáme.