PHP-搜索一个键值,然后在同一对象子数组中找到另一个键值

PHP-搜索一个键值,然后在同一对象子数组中找到另一个键值,php,search,object,multidimensional-array,podio,Php,Search,Object,Multidimensional Array,Podio,我为此搜索了很多,发现了几个类似的问题,但没有一个能完全解决我想要实现的目标 我试图编写一个代码,搜索一个PHP(多)多维数组,看看哪个子数组包含我拥有的唯一键值。然后我希望它返回同一对象子数组中不同键的值 $Arraytosearch = Array( . //various other subarrays . [fields] => Array ( . . . //I don't know the number of the object subarra

我为此搜索了很多,发现了几个类似的问题,但没有一个能完全解决我想要实现的目标

我试图编写一个代码,搜索一个PHP(多)多维数组,看看哪个子数组包含我拥有的唯一键值。然后我希望它返回同一对象子数组中不同键的值

$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)
我想编写一个函数,通过提供字段_id=>37325091的值来返回“REF100019”

有些事情我试过了,但没能去工作:
foreach
新的递归迭代器
,尽管我阅读的教程对我的案例没有帮助

尽管数组看起来很复杂,但我认为这很容易,因为我已经有了父数组的字段id

提前感谢您提供的任何指导或示例代码

背景:这是我在向他们的API提交请求后从Podio得到的响应的一部分。我只是不知道如何接受这个响应,并获得我需要的信息(ID),这样我就可以为用户回显它)

编辑:感谢Orangepill和Barmar的支持。我试过你的密码。但是有一个错误,这让我意识到我没有给你完整的数组。我了解了如何让Podio响应以更可读的格式显示(之前我从Podio调试文件中读取了完整的JSON响应,这让人非常困惑),并了解到完整的数组实际上是结构化的,如下所示

然后,我获取了您的代码,并能够找出如何使其适用于我的场景(见下文)。考虑到我以前从未编写过任何代码,我为自己感到非常自豪,但如果没有您的帮助,我不可能完成它!再次感谢

$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 ) ) 
注意:对于像我这样的编程新手,如果希望Podio响应(或任何JSON字符串)以上述“非常”可读的格式显示,请使用以下代码(感谢Phenex):


有很多方法可以剥这只猫的皮。。。这可能是最直截了当的

echo getFirstValueByFieldId("37325091", $Arraytosearch);
在你的情况下使用

// Get item collection
$itemCollection = PodioItem::filter(APP_ID, $filterParams);
$fieldID = 37325091;

foreach ($itemCollection['items'] as $item) {
  // Get the field from the item
  $field = $item->field($fieldID);
  // Now you can print the value of that field
  print $field->humanized_value;
  // Or if you don't want to have the content sanitized:
  print $field->values[0]['value'];
}

基本上,它遍历fields数组中的元素,并返回values数组中第一个关联值中的值,其中field_id等于函数的参数

podio php库具有内置方法,可为您处理所有这些问题。你自己没有必要弄乱_属性属性

你可以在网站上看到很多例子

就你而言:


这不仅仅是一个多维数组,其中还有一个对象。您需要使用对象表示法来访问其属性。您真的可以使用
$textitem[“\u attributes”]
访问对象的属性吗?是不是应该是
$textitem->field\u id
?谢谢大家的支持!我使用代码时出错,但这是我提供错误数组的错误。我能够找出如何将您的解决方案应用到实际阵列中,并且我已经更新了我的问题,以反映最终有效的代码。(但您的解决方案非常有效,再次感谢您!)
function getFirstValueByFieldId($fieldId, $Arraytosearch){
    foreach($Arraytosearch["fields"] as $textitem){
        if ($textitem->__attributes["field_id"] == $fieldId){
            return $textitems->__attributes["values"][0]["value"];

        }
    }   
}
echo getFirstValueByFieldId("37325091", $Arraytosearch);
// Get item collection
$itemCollection = PodioItem::filter(APP_ID, $filterParams);
$fieldID = 37325091;

foreach ($itemCollection['items'] as $item) {
  // Get the field from the item
  $field = $item->field($fieldID);
  // Now you can print the value of that field
  print $field->humanized_value;
  // Or if you don't want to have the content sanitized:
  print $field->values[0]['value'];
}