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í
×
    včera 23:55 | Komunita

    Ubuntu 26.04 LTS bude (𝕏) Resolute Raccoon (rezolutní mýval).

    Ladislav Hagara | Komentářů: 0
    včera 21:00 | Nová verze

    Netwide Assembler (NASM) byl vydán v nové major verzi 3.00. Přehled novinek v poznámkách k vydání v aktualizované dokumentaci.

    Ladislav Hagara | Komentářů: 0
    včera 20:11 | Komunita

    Linuxová distribuce Frugalware (Wikipedie) ke konci roku 2025 oficiálně končí.

    Ladislav Hagara | Komentářů: 0
    včera 17:22 | Nová verze

    Byla vydána nová verze 3.0.6 svobodné aplikace pro úpravu a vytváření rastrové grafiky GIMP (GNU Image Manipulation Program). Přehled novinek v oznámení o vydání a v souboru NEWS na GitLabu. Nový GIMP bude brzy k dispozici také na Flathubu.

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

    Americký výrobce čipů AMD uzavřel s americkou společností OpenAI smlouvu na několikaleté dodávky vyspělých mikročipů pro umělou inteligenci (AI). Součástí dohody je i předkupní právo OpenAI na přibližně desetiprocentní podíl v AMD.

    Ladislav Hagara | Komentářů: 1
    včera 12:22 | Nová verze Ladislav Hagara | Komentářů: 0
    5.10. 20:00 | Komunita

    Byly zpracovány a na YouTube zveřejněny videozáznamy z konference LinuxDays 2025.

    Ladislav Hagara | Komentářů: 0
    4.10. 15:22 | IT novinky

    Na konferenci LinuxDays 2025 byl oficiálně představen nový router Turris Omnia NG.

    Ladislav Hagara | Komentářů: 35
    4.10. 05:22 | Komunita

    Přímý přenos (YouTube) z konference LinuxDays 2025, jež probíhá tento víkend v Praze v prostorách FIT ČVUT. Na programu je spousta zajímavých přednášek.

    Ladislav Hagara | Komentářů: 17
    3.10. 22:44 | IT novinky

    V únoru loňského roku Úřad pro ochranu osobních údajů pravomocně uložil společnosti Avast Software pokutu 351 mil. Kč za porušení GDPR. Městský soud v Praze tuto pokutu na úterním jednání zrušil. Potvrdil ale, že společnost Avast porušila zákon, když skrze svůj zdarma dostupný antivirový program sledovala, které weby jeho uživatelé navštěvují, a tyto informace předávala dceřiné společnosti Jumpshot. Úřad pro ochranu osobních údajů

    … více »
    Ladislav Hagara | Komentářů: 11
    Jaké řešení používáte k vývoji / práci?
     (38%)
     (46%)
     (15%)
     (17%)
     (21%)
     (15%)
     (18%)
     (16%)
     (15%)
    Celkem 182 hlasů
     Komentářů: 12, poslední 4.10. 20:35
    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: 728×
    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.