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 | Nová verze

    V programovacím jazyce Go naprogramovaná webová aplikace pro spolupráci na zdrojových kódech pomocí gitu Forgejo byla vydána ve verzi 13.0 (Mastodon). Forgejo je fork Gitei.

    Ladislav Hagara | Komentářů: 0
    včera 14:22 | Bezpečnostní upozornění

    Společnost Eclypsium se na svém blogu rozepsala o bezpečnostním problému počítačů Framework. Jedná se o zranitelnost v UEFI umožňující útočníkům obejít Secure Boot.

    Ladislav Hagara | Komentářů: 0
    včera 02:33 | Nová verze

    Editor kódů Zed (Wikipedie) po macOS a Linuxu s verzí 0.208.4běží také ve Windows.

    Ladislav Hagara | Komentářů: 6
    15.10. 17:44 | IT novinky

    Apple dnes představil 14palcový MacBook Pro, iPad Pro a Apple Vision Pro s novým čipem M5.

    Ladislav Hagara | Komentářů: 20
    15.10. 13:55 | Nová verze

    Debian pro mobilní zařízení Mobian (Wikipedie) byl vydán ve verzi 13 Trixie. Nová stabilní verze je k dispozici pro PINE64 PinePhone, PinePhone Pro a PineTab, Purism Librem 5, Google Pixel 3a a 3a XL, OnePlus 6 a 6T a Xiaomi Pocophone F1.

    Ladislav Hagara | Komentářů: 2
    15.10. 13:11 | IT novinky

    Operátor O2 představil tarif Datamanie 1200 GB . Nový tarif přináší 1200 GB dat s neomezenou 5G rychlostí, a také možnost neomezeného volání do všech sítí za 15 Kč na den. Při roční variantě předplatného zákazníci získají po provedení jednorázové platby celou porci dat najednou a mohou je bezstarostně čerpat kdykoli během roku. Do 13. listopadu jej O2 nabízí za zvýhodněných 2 988 Kč. Při průměrné spotřebě tak 100 GB dat vychází na 249 Kč měsíčně.

    Ladislav Hagara | Komentářů: 7
    15.10. 12:33 | Bezpečnostní upozornění

    Byly publikovány informace o útoku na zařízení s Androidem pojmenovaném Pixnapping Attack (CVE-2025-48561). Aplikace může číst citlivá data zobrazovaná jinou aplikací. V demonstračním videu aplikace čte 2FA kódy z Google Authenticatoru.

    Ladislav Hagara | Komentářů: 1
    15.10. 07:11 | Zajímavý projekt

    Free Software Foundation (FSF) spustila projekt Librephone, jehož cílem je vytvoření svobodného operačního systému pro mobilní telefony. Bez binárních blobů.

    Ladislav Hagara | Komentářů: 11
    14.10. 16:44 | Nová verze

    Byla vydána verze 7 s kódovým název Gigi linuxové distribuce LMDE (Linux Mint Debian Edition). Podrobnosti v poznámkách k vydání. Linux Mint vychází z Ubuntu. LMDE je postaveno na Debianu.

    Ladislav Hagara | Komentářů: 0
    14.10. 16:33 | Nová verze

    Byl vydán Mozilla Firefox 144.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Vypíchnout lze lepší správu profilů. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 144 bude brzy k dispozici také na Flathubu a Snapcraftu.

    Ladislav Hagara | Komentářů: 0
    Jaké řešení používáte k vývoji / práci?
     (38%)
     (46%)
     (19%)
     (21%)
     (24%)
     (18%)
     (21%)
     (18%)
     (18%)
    Celkem 231 hlasů
     Komentářů: 14, poslední 14.10. 09:04
    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.