Home > Back-end >  Extracting associated value of nested array using unique value in PHP
Extracting associated value of nested array using unique value in PHP

Time:04-04

I am aware that I could use a loop to answer my question, but I was hoping that maybe PHP has a function to do what I am trying to achieve and that someone might know.

Basically I am trying to identify a unique key from a series of arrays and then extract the value of the correlated key in the array.

So basically, from this array:

$myarray = array(array("id" => 1, "label" => "True"), array("id" => 2, "label" => "False"))

I want to be able to find the label value when the id is searched and matched, i.e. $id = 1 should return True.

Any simple functions available to do this without having to write a couple of loops?

CodePudding user response:

It would be one simple loop. But if you are loopofobic, then you can rely on other functions (that acts as loop too):

function find(array $inputs, int $search): ?string
{
    $result = array_filter($inputs, fn ($input) => $input['id'] === $search);
    
    return current($result)['label'] ?? null;
}

$myarray = [["id" => 1, "label" => "True"], ["id" => 2, "label" => "False"]];

var_dump(find($myarray, 1)); // string(4) "True"
var_dump(find($myarray, 2)); // string(5) "False"
var_dump(find($myarray, 3)); // NULL

Live Example

CodePudding user response:

you may use the built-in function array_column() for your aim.

$myarray = array(array("id" => 1, "label" => "True"), array("id" => 2, "label" => "False"));

/* label (value) per id (key) in 1-dimensional array.*/
print_r(array_column($myarray,'label','id'));

will return

Array
(
    [1] => True
    [2] => False
)

so you may adjust the code below.

$myarray = array(array("id" => 1, "label" => "True"), array("id" => 2, "label" => "False"));

$id_val = 1;
$output = isset(array_column($myarray,'label','id')[$id_val]) ? array_column($myarray,'label','id')[$id_val] : 'key not found';
var_dump($output);
  • Related