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 02:20 | Zajímavý článek

David Revoy, autor open source webového komiksu Pepper&Carrot nebo portrétu GNU/Linuxu, upozorňuje na svém blogu, že nový Inkscape 0.92 rozbíjí dokumenty vytvořené v předchozích verzích Inkscape. Problém by měl být vyřešen v Inkscape 0.92.2 [reddit].

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

Øyvind Kolås, hlavní vývojář grafických knihoven GEGL a babl, které využívá grafický program GIMP, žádá o podporu na Patreonu. Díky ní bude moci pracovat na vývoji na plný úvazek. Milník 1000 $, který by stačil na holé přežití, se již téměř podařilo vybrat, dalším cílem je dosažení 2500 $, které mu umožní běžně fungovat ve společnosti.

xkomczax | Komentářů: 12
21.1. 23:54 | Pozvánky

DevConf.cz 2017, již devátý ročník jedné z největších akcí zaměřených na Linux a open source ve střední Evropě, proběhne od pátku 27. ledna do neděle 29. ledna v prostorách Fakulty informačních technologií Vysokého učení technického v Brně. Na programu je celá řada zajímavých přednášek a workshopů. Letos je povinná registrace.

Ladislav Hagara | Komentářů: 0
21.1. 22:11 | Nová verze

Byla vydána verze 1.0.0 emulátoru terminálu Terminology postaveného nad EFL (Enlightenment Foundation Libraries). Přehled novinek v poznámkách k vydání.

Ladislav Hagara | Komentářů: 0
20.1. 17:00 | Nová verze

Byl vydán Docker 1.13. Přehled novinek na YouTube a v poznámkách k vydání na GitHubu. Docker umožňuje běh aplikací v softwarových kontejnerech (Wikipedia).

Ladislav Hagara | Komentářů: 6
20.1. 15:51 | Komunita

Mozilla.cz informuje, že nástroje pro webové vývojáře se možná oddělí od Firefoxu a stanou doplňkem. Nástroje pro webové vývojáře prošly velkým přepisem a tým, který se stará o jejich vývoj, by uvítal možnost jejich častějších aktualizacích nezávisle na vydávání nových verzí Firefoxu.

Ladislav Hagara | Komentářů: 10
20.1. 07:00 | Humor

Čtenářům AbcLinuxu vše nejlepší k dnešnímu Dni zvýšení povědomí o tučňácích (Penguin Awareness Day).

Ladislav Hagara | Komentářů: 0
20.1. 06:00 | Komunita

Bylo spuštěno hlasování o přednáškách a workshopech pro letošní InstallFest, jenž proběhne o víkendu 4. a 5. března v Praze. Současně byla oznámena změna místa. InstallFest se letos vrací zpět na Karlovo náměstí do budovy E.

Ladislav Hagara | Komentářů: 0
20.1. 02:48 | Komunita

Greg Kroah-Hartman potvrdil, že Linux 4.9 je jádrem s prodlouženou upstream podporou (LTS, Long Term Support). Podpora je plánována do ledna 2019. Aktuální jádra s prodlouženou podporou jsou tedy 3.2, 3.4, 3.10, 3.12, 3.16, 3.18, 4.1, 4.4 a 4.9.

Ladislav Hagara | Komentářů: 0
20.1. 00:11 | Zajímavý článek

Výrobce síťových prvků, společnost Netgear, spustila nový program, který slibuje vývojářům, expertům, ale i běžným uživatelům vyplacení finanční odměny za nalezení bezpečnostních chyby v jejich produktech. Za nalezení zranitelnosti v hardware, API nebo mobilní aplikaci nabízí odměnu od 150 do 15 tisíc dolarů (dle závažnosti).

Michal Makovec | Komentářů: 0
Jak se stavíte k trendu ztenčování přenosných zařízení (smartphony, notebooky)?
 (10%)
 (2%)
 (74%)
 (4%)
 (10%)
Celkem 367 hlasů
 Komentářů: 25, poslední 21.1. 13:34
Rozcestník
Reklama

Dotaz: Jak na vnořená pole v php

4.6.2014 20:17 LM
Jak na vnořená pole v php
Přečteno: 476×
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: 66
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: 66
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: 66
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: 66
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.