PHP - search for a key value, and then look for the value of another key in the same subarray object

advertisements

I've searched a lot for this, and found several similar questions, but none quite address what I'm trying to accomplish.

I'm trying to write a code that will search a PHP (multi)multidimensional array to see which subarray contains the unique key value that I have. Then I would like it to return the value of a different key in that same object subarray.

$Arraytosearch = Array(
.
//various other subarrays
.
[fields] => Array (
    .
    .
    .
    //I don't know the number of the object subarray

   [x] => PodioTextItemField Object (
      [__attributes] => Array (
        [field_id] => 37325091
        [type] => text
        [external_id] => id
        [label] => ID
        [values] => Array (
            [0] => Array (
                [value] => REF100019 ) ) 

        [config] => Array (
            [description] => [settings] => Array (
                [size] => small )
            [required] => [mapping] => [label] => ID [visible] => 1 [delta] => 2 ) )
    .
    .
    .
     //(and so on)

I'd like to write a function that will return "REF100019" by supplying the value of the field_id => 37325091.

Some things I have tried that I couldn't get to work: foreach and new RecursiveIterator although the tutorials I read weren't useful for my case here.

Even though the array looks complicated, I think it will be easy since I already have the field id of the parent array.

Thank you in advance for any guidance or sample codes that will work!

Background: This is a part of the response I get from Podio after submitting a request to their API. I just don't know how to take that response and get the piece I need (the ID) so that I can echo it for users).

EDIT: Thank you Orangepill and Barmar for the support. I tried your code. But was getting an error, which made me realize I hadn't given you the full array. I figured out how to get the Podio response to display in a more readable format (I was reading the full JSON response before from the Podio debug file which was super confusing), and figured out the full array is actually structured as I have shown below.

I then took your code and was able to figure out how to make it work for my scenario (see below). Very proud of myself considering I have never written any code before, but I couldn't have done it without your help! Thanks again!

$Arraytosearch = Array(
  [items] => Array(
       [0] => PodioItem Object(
              [_attributes] => Array(
                      [fields] => Array (
                            [x] => PodioTextItemField Object (
                                  [__attributes] => Array(
                                         [field_id] => 37325091
                                         [values] => Array(
                                                [0] => Array(
                                                     [value] => REF100019 ) )

Note: For anyone who is new to programming like myself and wants the Podio response (or any JSON string) to display in a "pretty" readable format like above, use the code (from Display an array in a readable/hierarchical format thanks to Phenex):

print "<pre>";
print_r($Arraytoformat);
print "</pre>";

And finally, the full code I used (using Orangepill's answer below) which searches the objects and arrays and gives me what I have been searching for for days now is as follows:

$Arraytosearch = PodioItem::filter(APP_ID, $filterParams);
$fieldID = 37325091;    

    function getFirstValueByFieldId($fieldId, $Arraytosearch){
      foreach($Arraytosearch["items"][0]->__attributes["fields"] as $textitem){
        if ($textitem->__attributes["field_id"] == $fieldId){
        return $textitem->__attributes["values"][0]["value"];
    }}}

$refID = getFirstValueByFieldId($fieldID, $Arraytosearch);


There is a lot of ways to skin this cat... this is probably the most straight forward

function getFirstValueByFieldId($fieldId, $Arraytosearch){
    foreach($Arraytosearch["fields"] as $textitem){
        if ($textitem->__attributes["field_id"] == $fieldId){
            return $textitems->__attributes["values"][0]["value"];

        }
    }
}

to Use in your case would be

echo getFirstValueByFieldId("37325091", $Arraytosearch);

Basically it walks the elements in the fields array and returns the value in the first associated value in the values array where field_id is equal to the parameter of the function.