php - PHP - 从 JSON 中获取价值
问题描述
在我解码我的 JSON 之前,我得到了这个结果:
{
"1":[{"membership_id":1,"group_id":1,"user_id":1},
"2":[{"membership_id":3,"group_id":1,"user_id":2}
}
我将如何指定我要选择具有 'user_id' == 2 并返回 members_id 值的那个?
我的尝试,但我得到未定义的值'user_id':
$myjson = json_decode($s_o, true);
foreach ($myjson as $key => $value){
if($value['user_id'] == $cid){
$mid = $value['membership_id'];
}
}
echo $mid;
基本上我想我首先必须选择正确的对象并使用 foreach 完成它,但是在这里我有点迷失了。
解决方案
使用数组函数:
$json = '{
"1":[{"membership_id":1,"group_id":1,"user_id":1}],
"2":[{"membership_id":3,"group_id":1,"user_id":2}]
}';
$array = json_decode($json, true);
$searchUserID = 2;
$filteredArray = array_filter($array, function($elem) use ($searchUserID){
return $searchUserID == $elem[0]['user_id'];
});
$mid = array_column(array_shift($filteredArray), 'membership_id')[0];
echo "Membership-ID: ".$mid;
array_filter
使用一个回调函数迭代数组的每个元素。如果回调函数返回 true,则将该元素分配给$filteredArray
. 这种方式不需要 foreach 循环。但返回值是整个数组元素:
Array
(
[2] => Array
(
[0] => Array
(
[membership_id] => 3
[group_id] => 1
[user_id] => 2
)
)
)
所以你必须提取你的membership_id。
从内到外阅读以下行。首先,我们获取数组的第一个条目array_shift
(因为我们只有一个条目,这将是我们想要的条目)。
Array
(
[0] => Array
(
[membership_id] => 3
[group_id] => 1
[user_id] => 2
)
)
我们将这个数组传递给array_column
以在封装数组中查找具有列 name 的条目membership_id
。由于 array_column 再次返回一个数组,
Array
(
[0] => 3
)
我们通过将 [0] 添加到此命令的末尾来获得(唯一的)条目。
由于最后一部分有点复杂,这里是一个撕裂的版本:
$firstEntryOfFilteredArray = array_shift($filteredArray);
$arrayWithValueOfColumnMembershipID = array_column($firstEntryOfFilteredArray, 'membership_id');
$membership_id = $arryWithValueOfColumnMembershipID[0];
这三行连接成这样:
$mid = array_column(array_shift($filteredArray), 'membership_id')[0];
这是一个工作示例:http ://sandbox.onlinephpfunctions.com/code/8fe6ede71ca1e09dc68b2f3bec51743b27bf5303
推荐阅读
- couchbase - 您如何控制 Couchbase Java 客户端序列化日期的方式?
- java - 解析平台的新手:关于获取关系的 objectId 的问题
- excel - 如何在 Excel 中查找两个日期之间一个月的第 n 天过去了多少次?
- jquery - 使用 Mapbox gl JS 测量距离
- gitlab - 运行pipline后如何排查Gitlab中Job Failed的错误
- c++ - unordered_map 中的值正在改变自身
- javascript - 无法从 Firebase Firestore 获取字段
- java - 有什么方法可以通过检查正在运行的活动配置文件来动态加载@ImportResources?
- r - 我正在使用: R x64 ,并且无法运行我的代码,我不知道是什么问题
- node.js - 为什么在NodeJS中将过滤器应用于mongoose-paginate时结果为空?