You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PHP中按值搜索多维JSON数组并获取对应用户ID

解决方案

核心思路

你的PHP数组结构里,外层数组包含links和data两个键,其中data是存储所有用户记录的索引数组。每条用户记录里:

  • id是直接的顶级字段
  • attributes是子数组,存储着包含email的用户属性

只需要遍历data数组,逐一检查每条记录的attributes['email']是否匹配目标值,找到后返回对应的id即可(因为email唯一,找到后可直接终止遍历节省资源)。

基础遍历实现(易理解,适合调试)

这种写法逻辑直白,新手也能快速上手:

// 假设$jsonString是原始JSON字符串,转成关联数组(第二个参数传true)
$userData = json_decode($jsonString, true);

$targetEmail = 'x3@gmail.com';
$matchedId = null;

// 遍历所有用户记录
foreach ($userData['data'] as $userRecord) {
    // 访问嵌套的email字段做匹配校验
    if ($userRecord['attributes']['email'] === $targetEmail) {
        $matchedId = $userRecord['id'];
        // 唯一email,找到就跳出循环
        break;
    }
}

// 输出结果
if ($matchedId) {
    echo "匹配的用户ID:{$matchedId}";
} else {
    echo "未找到对应邮箱的用户";
}

简洁函数式实现

如果习惯用PHP数组函数,可以用array_filter快速过滤:

$userData = json_decode($jsonString, true);
$targetEmail = 'x3@gmail.com';

// 过滤出匹配邮箱的用户记录
$filteredRecords = array_filter($userData['data'], function($record) use ($targetEmail) {
    return $record['attributes']['email'] === $targetEmail;
});

// 取第一条匹配记录的id(email唯一,最多一条结果)
$matchedId = !empty($filteredRecords) ? reset($filteredRecords)['id'] : null;

var_dump($matchedId);

嵌套层级说明

你需要明确的数组层级路径:

  • 外层数组:$userData(包含links、data键)
  • 用户记录集合:$userData['data'](索引数组,每个元素是单条用户数据)
  • 单条用户数据:$userRecord(包含id、attributes等键)
  • 用户属性子数组:$userRecord['attributes'](包含email字段)

所以访问邮箱的路径是$userRecord['attributes']['email'],访问ID的路径是$userRecord['id']

内容的提问来源于stack exchange,提问作者SteveG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 17:00:06