douzhushen_9776 2016-06-25 09:44
浏览 48
已采纳

使用php动态搜索jsonarray多个值

i have a json array

[  
  {  
     "id":1.25,
     "name":"rose",
     "Number":15,
     "SSN":[  
         12345,
         3455
     ]
  },

  {  
     "id":1.15,
     "name":"orchid",
     "Number":7,
     "SSN":[  
        12345,
        3455
     ]
  }
]

i want to get the id value if user searched with any ssn or name or by number.the input for search may not be single value that means it may be combination of ssn and name or it may be name,ssn and number .Any combination of name number ,ssn may be inputs .i have to get id value if the inputs matches using php .i used xpath for xml but i want to search fron json.can someone suggest me with any idea..thank you...

  • 写回答

3条回答 默认 最新

  • doukuang1950 2016-06-25 10:43
    关注

    To search user ID by analyzing JSON string use the following approach with array_filter and array_intersect_assoc functions:

    $json_str = '[ { "id":1.25, "name":"rose", "Number":15, "SSN":[ 12345, 3455 ] }, { "id":1.15, "name":"orchid", "Number":7, "SSN":[ 12345, 3455 ] }]';
    $decoded = json_decode($json_str, true);
    
    // base search structure
    $search_structure = ['name' => "", 'Number' => 0];
    
    // let's say, the following inputs have come from API (some of them may be empty or omitted)
    $number = 7;
    $ssn = "3455";
    
    if ($number && is_numeric($number)) $search_structure['Number'] = $number;
    $search_structure = array_filter($search_structure); // filtering out empty params
    $count_params = count($search_structure);
    $user_id = 0;
    
    foreach ($decoded as $item) {
        if ($count_params == count(array_intersect_assoc($search_structure, $item))) {
            if (!$ssn || ($ssn && in_array($ssn, $item['SSN']))) {
                $user_id = $item['id'];
                break;
            }
        }
    }
    
    print_r(($user_id)? "User id: $user_id" : "User with specified params not found!");
    

    The output:

    User id: 1.15
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 请分析一下这个电路设计的优点🙏
  • ¥15 求视频摘要youtube和ovp数据集
  • ¥15 怎么改成输入一个要删除的数后现实剩余的数再输入一个删除的数再现实剩余的数用yes表示继续no结束程序
  • ¥15 在启动roslaunch时出现如下问题
  • ¥15 汇编语言实现加减法计算器的功能
  • ¥20 关于多单片机模块化的一些问题
  • ¥30 seata使用出现报错,其他服务找不到seata
  • ¥35 引用csv数据文件(4列1800行),通过高斯-赛德尔法拟合曲线,在选取(每五十点取1点)数据,求该数据点的曲率中心。
  • ¥20 程序只发送0X01,串口助手显示不正确,配置看了没有问题115200-8-1-no,如何解决?
  • ¥15 Google speech command 数据集获取