Portál AbcLinuxu, 10. května 2025 13:13
$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
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é.
$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 ?
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.