PHP-从JSON获取价值

时间:2018-07-05 22:04:23

标签: 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并返回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进行处理,但是在这种情况下,我有些失落。

3 个答案:

答案 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匹配的事实只是一个巧合,那就没关系了:)