I have Array(A) = ('red','green')
and
Array(B)
( array('colour' => "red", 'name_cz' =>"cervena"),
array('colour' => "green", 'name_cz' =>"zelena"),
array('colour' => "blue", 'name_cz' =>"modra"),
array('colour' => "yellow", 'name_cz' =>"zluta")
)
I need to take every value of Array(A), compare it with Array(B) colour values and if it finds get its name_cz value...
so the output of the example should be like $result = (array("cervena", "zelena");
Thanks for help, subii
CodePudding user response:
There's probably a million ways to do this.
Here's how I'd write this:
<?php
$a = array('red','green');
$b = array(
array('colour' => "red", 'name_cz' =>"cervena"),
array('colour' => "green", 'name_cz' =>"zelena"),
array('colour' => "blue", 'name_cz' =>"modra"),
array('colour' => "yellow", 'name_cz' =>"zluta")
);
$result = array_filter($b,function($v) use ($a){
return in_array($v['colour'],$a);
});
$result = array_column($result,'name_cz');
print_r($result); // Array ( [0] => cervena [1] => zelena )
CodePudding user response:
This are two tasks, filter the lists for matching elements and map them.
$data = [
['colour' => "red", 'name_cz' =>"cervena"],
['colour' => "green", 'name_cz' =>"zelena"],
['colour' => "blue", 'name_cz' =>"modra"],
['colour' => "yellow", 'name_cz' =>"zluta"]
];
$colours = ['red','green'];
// filter by colour
$filtered = array_filter(
$data,
function($translation) use ($colours) {
// return true if the element matches
return (in_array($translation['colour'], $colours));
}
);
// map to string array
$mapped = array_map(
fn ($translation) => $translation['name_cz'],
$filtered
);
var_dump($mapped);
