在解码JSON之前,我会得到以下结果:
{
"1":[{"membership_id":1,"group_id":1,"user_id":1},
"2":[{"membership_id":3,"group_id":1,"user_id":2}
}
我如何指定我要选择一个具有'user_id'== 2并返回Membership_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进行处理,但是在这种情况下,我有些失落。
答案 0 :(得分:1)
使用数组函数:
$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
,以在封装的数组中找到具有列名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
答案 1 :(得分:0)
我假设JSON实际上如下所示:
{
"1":[{"membership_id":1,"group_id":1,"user_id":1}],
"2":[{"membership_id":3,"group_id":1,"user_id":2}]
}
由于某种原因,对象的每个元素都是一个数组。因此,您需要使用$value[0]
对其进行索引才能访问其中包含的对象。
$myjson = json_decode($s_o, true);
foreach ($myjson as $key => $value){
if($value[0]['user_id'] == $cid){
$mid = $value[0]['membership_id'];
break;
}
}
echo $mid;
如果数组可以包含多个元素,则需要嵌套循环。
$myjson = json_decode($s_o, true);
foreach ($myjson as $key => $value){
foreach ($value as $object) {
if($object['user_id'] == $cid){
$mid = $object['membership_id'];
break 2;
}
}
}
echo $mid;
答案 2 :(得分:0)
这有点推测,但是我认为数据是通过用户ID索引的。如果是这样,它将使查找变得更加简单。
使用$myjson = json_decode($s_o, true);
解码后
只需按ID查找记录,然后从匹配的行中获取Membership_id。
$membership_id = reset($myjson['2'])['membership_id'];`
您可能应该验证该ID是否存在,所以可能类似于:
$membership_id = isset($myjson['2']) ? reset($myjson['2'])['membership_id'] : null;
如果我错了,并且行号与user_id匹配的事实只是一个巧合,那就没关系了:)