我为此搜索了很多,发现了几个类似的问题,但没有一个能完全解决我想要完成的问题。
我正在尝试编写一个代码来搜索 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)
我想编写一个函数,通过提供 field_id => 37325091 的值来返回“REF100019”。
我尝试过的一些事情我无法开始工作:
虽然我阅读foreach
的new RecursiveIterator
教程对我的案例没有用处。
尽管数组看起来很复杂,但我认为这很容易,因为我已经有了父数组的字段 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 字符串)以类似上面的“相当”可读格式显示的任何人,请使用代码(来自Display an array in a readable/hierarchical format感谢菲尼克斯):
print "<pre>";
print_r($Arraytoformat);
print "</pre>";
最后,我使用的完整代码(使用下面的 Orangepill 的答案)搜索对象和数组并给出我几天来一直在搜索的内容如下:
$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);