首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP -从JSON获取值

PHP -从JSON获取值
EN

Stack Overflow用户
提问于 2018-07-06 06:04:23
回答 3查看 82关注 0票数 -1

在我解码我的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遍历它,但在这里,我在这种情况下有点迷失。

EN

回答 3

Stack Overflow用户

发布于 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

票数 1
EN

Stack Overflow用户

发布于 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;
票数 0
EN

Stack Overflow用户

发布于 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匹配只是巧合,那么没关系:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51200485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档