首页 > 解决方案 > 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 完成它,但是在这里我有点迷失了。

标签: phpjson

解决方案


使用数组函数:

$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


推荐阅读