Portál AbcLinuxu, 5. listopadu 2025 05:02
$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.