在我解码我的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遍历它,但在这里,我在这种情况下有点迷失。
发布于 2018-07-06 07:32:26
使用Array-Functions:
$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
)
我们通过添加到此命令的末尾来获得(一个也是唯一的)条目。
由于最后一部分有点复杂,下面是它的一个撕裂版本:
$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
发布于 2018-07-06 06:30:29
我假设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;
发布于 2018-07-06 06:46:53
这有点投机性,但我认为数据是通过用户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匹配只是巧合,那么没关系:)
https://stackoverflow.com/questions/51200485
复制相似问题