Ulozisko dat v poli rubrika: Programování: PHP
4
mario2402
položil/-a 8.12.2017
Ahojte,
nevie ma niekto nakupnut spravnym smerom ako urobit nieco taketo:
Mam pole:
$cesta = [ 'cesta' , 'ku' , 'datam' ]; // moze byt rozny pocet hodnot $data = 'nejake data'; function setData($cesta , $data) { ... $pole['cesta']['ku']['datam'] = $data; ... } function getData($cesta) { ... return $pole['cesta']['ku']['datam']; ... }
Momentalne to riesim tak, ze si spocitam kolko hodnot je v $cesta a idem:
if ($pocet == 1) { $pole['cesta']; } elseif ($pocet == 2) { $pole['cesta']['ku']; } // atd
co nevyzera ani dobre, a ani neriesi rozny pocet hodnot ktore mozu byt v $cesta..
absolutne nic ma nenapada, ako toto vyriesit :(
Kod uz nezmenim (musel by som prekopat komplet aplikaciu) :(
odkaz
9
Taco
odpověděl/-a 9.12.2017
Pokud trváš na zanoření polí, tak jeden způsob pomocí referencí:
class X { private $data = []; function setData($path, $val) { self::setDataRef($this->data, $path, $val); } private static function setDataRef(&$ref, $path, $val) { $level = array_shift($path); if (empty($path)) { $ref[$level] = $val; return; } if (!isset($ref[$level])) { $ref[$level] = []; } self::setDataRef($ref[$level], $path, $val); } } $bank = new X; $bank->setData(['a', 'b', 'c'], 'value'); print_r($bank);
Komentáře
- Rike : Mám dotaz - proč je metoda setDataRef privátní (to chápu) a statická (to mi úplně nedochází)? Plyne z toho nějaká výhoda? — 9.12.2017
- Anonym : @Taco Nakonec tam ale stejně dáváš jako argument `($this->data`,nebo jsem něco asi přehlédl? Proč je statická? Nakonec má PHP něco jako je v Pythonu `@classmethod`? — 9.12.2017
- Taco : Statická je proto, protože v té metodě nepotřebuji $this. $this je další závislost, na kterou musím myslet. Čím méně závislostí, tím víc adidas. — 9.12.2017
- Taco : @uetoyo: Tak ten argument `$this->data` tam dávám jako inicializační bod, že jo. Nemůžu k němu přistupovat v jeho původním smyslu. *** Když bych to psal v Pythonu, tak bych nepoužíval statickou metodu, ale udělal bych si lokální funkci. (Ale v Pythonu neumím používat reference.) — 9.12.2017
- Anonym : @Taco "udělal bych si lokální funkci." Dík za vysvětlení! — 10.12.2017
Pro zobrazení všech 8 odpovědí se prosím přihlaste:
Nebo se přihlaste jménem a heslem:
Komentáře