PHP-搜索一个键值,然后在同一对象子数组中找到另一个键值
我为此搜索了很多,发现了几个类似的问题,但没有一个能完全解决我想要实现的目标 我试图编写一个代码,搜索一个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
$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'];
}