Portál AbcLinuxu, 10. května 2025 13:13

Dotaz: PHP - Získání klíče z vnořeného pole podle hodnoty prvku

6.4.2014 16:18 Jakub
PHP - Získání klíče z vnořeného pole podle hodnoty prvku
Přečteno: 231×
Odpovědět | Admin
$a = array('a' => array('bar' => 'aa', 'act' => 1, 'ber' => 8),
           'b' => array('bar' => 'bb', 'act' => 1, 'ber' => 8),
           'c' => array('bar' => 'cc', 'act' => 1, 'ber' => 7),
           'd' => array('bar' => 'dd', 'act' => 1, 'ber' => 1)
);
Ahoj, poradíte jak získat bez cyklu název klíče (c) když znám jen hodnotu (cc) prvku (bar) ? Děkuji
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Jendа avatar 6.4.2014 16:40 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: PHP - Získání klíče z vnořeného pole podle hodnoty prvku
Odpovědět | | Sbalit | Link | Blokovat | Admin
To podle mě nepůjde. Vnořená pole fakt nejsou vhodná na vyhledávání. Tahle úloha si říká o binární strom.
6.4.2014 16:50 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: PHP - Získání klíče z vnořeného pole podle hodnoty prvku
Odpovědět | | Sbalit | Link | Blokovat | Admin
Možná by se k tomu účelu dala použít databáze, kde se takové operace dělají poměrně snadno.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
wamba avatar 6.4.2014 18:06 wamba | skóre: 38 | blog: wamba
Rozbalit Rozbalit vše Re: PHP - Získání klíče z vnořeného pole podle hodnoty prvku
Odpovědět | | Sbalit | Link | Blokovat | Admin
asi by se dalo použít array_filter něco jako (psáno v Perl-u), kde je cyklus schován
#!/usr/bin/perl
use 5.010;

my %a = (
    'a' => { 'bar' => 'aa', 'act' => 1, 'ber' => 8 },
    'b' => { 'bar' => 'bb', 'act' => 1, 'ber' => 8 },
    'c' => { 'bar' => 'cc', 'act' => 1, 'ber' => 7 },
    'd' => { 'bar' => 'dd', 'act' => 1, 'ber' => 1 },
);

say grep { $a{$_}{bar} eq 'cc' } keys %a;
ale pravděpodobně bude nejschůdnější vytvořit nové asociativní pole, kde klíče budou hodnoty bar a hodnoty klíče a
my %bar;
foreach my $key ( keys %a ) {
    $bar{ $a{$key}{'bar'} } = $key;
};

say $bar{'cc'};
omlouvám se za použití Perl-u v příkladech, ale PHP dostatečně neznám a bylo by to pro mě nesnadné. Doufám, že i tak je to pochopitelné.
This would have been so hard to fix when you don't know that there is in fact an easy fix.
7.4.2014 11:50 Lucius
Rozbalit Rozbalit vše Re: PHP - Získání klíče z vnořeného pole podle hodnoty prvku
Odpovědět | | Sbalit | Link | Blokovat | Admin
uz jsem to tu psal u dotazu

http://www.abclinuxu.cz/poradna/programovani/show/389582

zhruba
$source = array('aaa' => array('a' => 'a-aaa', 'b' => 'b-aaa'),
                    'bbb' => array('a' => 'a-bbb', 'b' => 'b-bbb'),
                    'ccc' => array('a' => 'a-ccc', 'b' => 'b-ccc'),
                    'ddd' => array('a' => 'a-ddd', 'b' => 'b-ddd'),
                    'eee' => array('a' => 'a-eee', 'b' => 'b-eee'));

$output=''; // index pole pro nalezenou hodnotu
$find = 'a-eee'; // hledana hodnota

array_walk(array_keys($source),create_function('$value, $key,$param', 'in_array($param[1], $param[0][$value])? $param[2] = $value: "";'),array($source,$find,&$output)); 

echo $output;
ale je to trochu "pres ruku" a docela by me zajimalo proc neni mozne pouzit treba foreach ?

Založit nové vláknoNahoru

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

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.