Home > Software design >  PHP: search array(A) value in array(B) and get 2nd "column" value
PHP: search array(A) value in array(B) and get 2nd "column" value

Time:01-30

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); 
  •  Tags:  
  • Related