abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 11:00 | Pozvánky

    Organizátoři konference LinuxDays ukončil veřejné přihlašování přednášek. Teď je na vás, abyste vybrali nejlepší témata pro letošní ročník. Hlasovat můžete do pondělí 7. září, poté bude podle výsledků hlasování sestaven program pro letošní ročník.

    Petr Krčmář | Komentářů: 1
    dnes 10:55 | Nová verze

    Servo, engine webového prohlížeče napsaný v Rustu, byl vydán ve verzi 0.5.0. Novinky shrnuje přehled projektu za červenec. Došlo k dalšímu pokroku ve vykreslování webových stránek. Současným cílem projektu je vytvořit komponentu webového prohlížeče jako WebView pro použití v jiných aplikacích.

    |🇵🇸 | Komentářů: 0
    dnes 10:44 | IT novinky

    IKEA a XBOX představují kolekci YXSTABY (pdf). Ta přináší designová a praktická řešení, díky nimž se prostor pro hraní během sekundy promění v útulný a harmonický domov.

    Ladislav Hagara | Komentářů: 1
    dnes 02:00 | Nová verze

    Jonathan Thomas oznámil vydání verze 4.0 nelineární střižny OpenShot. Nově podporuje nahrávání obrazu a zvuku, vylepšuje uživatelské rozhraní, mj. color grading, přidává další efekty a mnoho dalšího (seznam změn).

    |🇵🇸 | Komentářů: 0
    včera 17:22 | Komunita

    Proběhlo hlasování o používání LLM při vývoji Debianu. Vývojáři Debianu si odhlasovali zodpovědné využívání generativní umělé inteligence.

    Ladislav Hagara | Komentářů: 2
    včera 16:11 | Komunita

    Sovereign Tech Agency (Wikipedie) prostřednictvím svého fondu Sovereign Tech Fund podpoří vývoj Flatpaku částkou 508 640 eur.

    Ladislav Hagara | Komentářů: 0
    včera 15:55 | Zajímavý software

    Byla vydána první veřejná verze v7.0-mk2 projektu Multikernel (mklinux), který umožňuje spouštět více nezávislých linuxových jader současně na jednom stroji bez hypervizoru.

    Ladislav Hagara | Komentářů: 0
    včera 15:11 | IT novinky

    Heureka Group uspěla v soudním sporu se společností Google. Městský soud v Praze vydal rozhodnutí v oblasti soukromoprávního vymáhání soutěžního práva. Společnosti Heureka Group přiznal náhradu ušlého zisku ve výši 250 milionů korun, což spolu s úroky z prodlení a náhradou nákladů řízení činí více jak 410 milionů korun. Základem celého sporu bylo protisoutěžní jednání technologického giganta Google v letech 2013 až 2017. Google na

    … více »
    Ladislav Hagara | Komentářů: 12
    včera 14:44 | Komunita

    Dnešním dnem končí LTS podpora Debianu 11 s kódovým názvem Bullseye. K dispozici je Extended LTS podpora.

    Ladislav Hagara | Komentářů: 0
    28.8. 08:11 | Komunita

    Firma X zaslala předžalobní výzvu vývojáři projektu Nitter (Wikipedia), open-source alternativního frontendu k sociální síti X (ex-Twitter), a provozovatelům instancí jako XCancel, které umožňovaly číst příspěvky bez přihlášení, reklam a javascriptu. Údajně se dopouštějí „sběru dat“. Zdrojový kód Nitteru vývojář archivoval. Vývoj již dříve přerušil v roce 2024 po tehdejším omezení API X. X je dceřiná společnost SpaceXAI Elona Muska, provozující mj. kontroverzního chatbota Grok.

    |🇵🇸 | Komentářů: 26
    Které desktopové prostředí na Linuxu používáte?
     (10%)
     (7%)
     (2%)
     (19%)
     (29%)
     (7%)
     (6%)
     (2%)
     (15%)
     (22%)
    Celkem 2527 hlasů
     Komentářů: 31, poslední 13.8. 00:27
    Rozcestník

    Dotaz: Jak na vnořená pole v php

    4.6.2014 20:17 LM
    Jak na vnořená pole v php
    Přečteno: 921×
    Ahoj, můžete mi prosím poradit, jak prohledávat pole v php?

    když budu mít pole
    $arr['a'] = array('1');
    $arr['b'] = array('2');
    $arr['c'] = array('3');
    $arr['d'] = array('4');
    
    $arr['b']['a'] = array('1');
    $arr['b']['b'] = array('2');
    
    $arr['b']['b']['a'] = array('1');
    $arr['b']['b']['b'] = array('1');
    a když bude
    $dis = array('b');
    tak potřebuji získat hodnotu z
    $arr['b']
    a když bude
    $dis = array('b', 'b');
    tak potřebuji získat hodnotu z
    $arr['b']['b']
    a když bude
    $dis = array('b', 'b', 'b');
    tak potřebuji získat hodnotu z
    $arr['b']['b']['b']
    atd.. Vždy znám jen hloubku toho vnoření, což je počet klíčů v poli $dis. Děkuji za případnou pomoc

    Odpovědi

    4.6.2014 20:41 Kit
    Rozbalit Rozbalit vše Re: Jak na vnořená pole v php
    Místo prohledávání polí používáme databáze. V příkladech však žádné vnořené pole nevidím. K čemu to potřebuješ? Třeba se dá obejít i bez toho prohledávání.
    Josef Kufner avatar 4.6.2014 21:21 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Jak na vnořená pole v php
    Ty se v podstatě snažíš získat vrchol na konci cesty grafem (stromem). Na to je asi nejjednodušší toto:
    $arr = array('a' => array('b' => array('c' => 'Hello')));
    $path = array('a', 'b', 'c');
    
    function walkPath($arr, $path) {
      $p = & $arr;
      foreach ($path as $n) {
        if (array_key_exists($n, $p)) {
          $p = & $p[$n];
        } else {
          throw new \InvalidArgumentException('Invalid path.');
        }
      }
      return $p;
    }
    
    // Toto by melo vypsat 'Hello'
    echo walkPath($arr, $path), "\n";
    Hello world ! Segmentation fault (core dumped)
    4.6.2014 21:40 LM
    Rozbalit Rozbalit vše Re: Jak na vnořená pole v php
    Díky za kód ale dívám se co jsi napsal a zjistil jsem, že jsem špatně položil dotaz, SAKRA! Ale snad jen taková drobnost, teda pro odborníka, ne pro mně :-( Potřebuji vypsat vždy všechny, ne jen ten poslední, čili
    a
    ab
    abc
    Děkuji
    4.6.2014 21:51 LM
    Rozbalit Rozbalit vše Re: Jak na vnořená pole v php
    Pepo ale stejně tohle
    $arr = array('a' => array('b' => array('c' => 'Hello')));
    není totžné s tím co potřebuji
    $arr = array();
    $arr['a'] = array('a');
    $arr['a']['b'] = array('ab');
    $arr['a']['b']['c'] = array('abc');
    Josef Kufner avatar 4.6.2014 22:54 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Jak na vnořená pole v php
    Přílohy:
    To nepůjde. Nemůžeš na jedno místo nacpat dvě hodnoty. $arr['a'] buď může obsahovat array('a') (2. řádek) nebo může obsahovat array('b' => array('ab')) (3. řádek).
    $arr = array('a' => array('b' => array('c' => 'Hello')));
    je totéž jako:
    $arr = array();
    $arr['a']['b']['c'] = 'Hello';
    Pokud chceš mít v tom stromu hodnoty i jinde než na listech, tak musíš buď zdvojnásobit vrstvy, nebo určit speciální klíč pro hodnoty:
    $arr = array();
    $arr['a']['#'] = 'a';
    $arr['a']['b']['#'] = 'ab';
    $arr['a']['b']['c']['#'] = 'abc';
    Pak v kterémkoliv vrcholu budeš mít k dispozici hodnotu pod klíčem '#'.

    Tedy celý strom bude vypadat takto -- viz příloha.

    Ale je to takové ošklivé, i když vcelku efektivní.
    Hello world ! Segmentation fault (core dumped)
    4.6.2014 23:02 LM
    Rozbalit Rozbalit vše Re: Jak na vnořená pole v php
    Nevím, zda si rozumíme, co příklad? Aktuální situace:

    V systému je mimo jiné takový kousek pole
    $arr                = array();
    $arr['a']           = array('FOO' => 'a',   'BAR' => 'a2');
    $arr['a']['b']      = array('FOO' => 'ab',  'BAR' => 'ab2');
    $arr['a']['b']['c'] = array('FOO' => 'abc', 'BAR' => 'abc2');
    
    $dis = array('a', 'b', 'c');
    
    a potřebuji nadefinovat takové nové pole pro další práci...
    $newarr = array();
    $newarr['a'] = array('FOO' => 'a',   'BAR' => 'a2');
    $newarr['b'] = array('FOO' => 'ab',  'BAR' => 'ab2');
    $newarr['c'] = array('FOO' => 'abc', 'BAR' => 'abc2');
    a ještě výsledky
    echo $newarr['a']['FOO']; //a
    echo $newarr['a']['BAR']; //a2
    echo $newarr['b']['FOO']; //ab
    echo $newarr['b']['BAR']; //ab2
    echo $newarr['c']['FOO']; //abc
    echo $newarr['c']['BAR']; //abc2
    
    Je to lepší ? Díky
    Josef Kufner avatar 4.6.2014 23:18 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Jak na vnořená pole v php
    Pokud poznáš 'a' of 'FOO', tak to prostě jen rekurzivně projdi.
    Hello world ! Segmentation fault (core dumped)
    4.6.2014 23:21 LM
    Rozbalit Rozbalit vše Re: Jak na vnořená pole v php
    Znám pouze jen názvy klíčů uložené v $dis
    $dis = array('a', 'b', 'c');
    Josef Kufner avatar 4.6.2014 23:34 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Jak na vnořená pole v php
    Takže když je to v $dis, tak je to 'a' a jinak 'FOO'? Pokud ano, tak jednoduchá rekurzivní funkce na průchod stromem ti to pořeší.
    Hello world ! Segmentation fault (core dumped)
    4.6.2014 23:44 LM
    Rozbalit Rozbalit vše Re: Jak na vnořená pole v php
    Nee, v poli $dis jsou uloženy názvy klíčů, klíč s názvem 'a', 'b' a 'c'. Tyto klíče jsou shodné jak pro staré pole $arr, tak pro nově definované pole $newarr.
    5.6.2014 08:56 deadmail
    Rozbalit Rozbalit vše Re: Jak na vnořená pole v php
    V systému je mimo jiné takový kousek pole
    $arr                = array();
    $arr['a']           = array('FOO' => 'a',   'BAR' => 'a2');
    $arr['a']['b']      = array('FOO' => 'ab',  'BAR' => 'ab2');
    $arr['a']['b']['c'] = array('FOO' => 'abc', 'BAR' => 'abc2');
    
    Takze vlastne mate pole:
    Array ( [a] => Array ( [FOO] => a [BAR] => a2 [b] => Array ( [FOO] => ab [BAR] => ab2 [c] => Array ( [FOO] => abc [BAR] => abc2 ) ) ) ) 
    
    Sice nevidim dovod takeho pouzitia, ale potom nieco taketo by to mohlo generovat:
     
     $dis = array('a', 'b', 'c'); 
    
     $newarr = array(); $tmp = $arr;
     foreach($dis as $k) {
      $newarr[$k] = array_intersect_key($tmp[$k], array('FOO' => 0, 'BAR' => 0));
      // $newarr[$k] = array('FOO' => $tmp[$k]['FOO'], 'BAR' => $tmp[$k]['BAR']); //alebo takto
      $tmp = $tmp[$k];
     }
    
     print_r($newarr);
    

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.