php - 有没有办法搜索以逗号分隔的 json 属性并通过不同的属性名称返回成员 id?

标签 php javascript mysql json

我希望我的解释是正确的;例如,我想要匹配值的 user_id:id:在返回的 JSON 数组/对象中,如下所示...

[{"user_id":"1","value":"92056,92054,92018"},{"user_id":"3","value":"92056"},
{"user_id":"2","value":"Massachusetts, Wyoming, Tennessee"},
{"user_id":"5","value":"California"},
{"user_id":"9","value":"New Mexico, Mississippi, Washington"},
{"user_id":"11","value":"Nevada"},{"user_id":"8","value":"Oklahoma, Louisiana"},
{"user_id":"6","value":"Montana, Oregon"},
{"user_id":"10","value":"Virginia, Illinois"}]

例如,如果我的来源是92056,我想要获取“1”,因为我的92056的user_id是“1”。

如果是新墨西哥州,我想要“9”,依此类推。

该值可以包含数百个邮政编码,因此我想要一种快速搜索这些值或类似值的方法,因为这永远不会重复;每个 user_id 将有多个唯一的区域或“值”。

如果出现这种情况,我将使用 PHP 从数据库中提取数据并传递到 JavaScript 变量中,如下所示(在 Wordpress 中)...

 <?php
        global $wpdb;
        $fullPHP = $wpdb->get_results("SELECT user_id, value FROM " . "refer_cimy_uef_data;");
 ?>
        var phpreps = JSON.stringify(<?php echo json_encode($fullPHP); ?>);
        $("#phpoutput").html(phpreps);

最佳答案

这似乎符合您的要求?:

http://jsfiddle.net/WVqFr/1/

var input = [{"user_id":"1","value":"92056,92054,92018"},{"user_id":"3","value":"92056"},
{"user_id":"2","value":"Massachusetts, Wyoming, Tennessee"},
{"user_id":"5","value":"Massachusetts, Wyoming, California, Tennessee"},
{"user_id":"9","value":"New Mexico, Mississippi, Washington"},
{"user_id":"11","value":"Nevada"},{"user_id":"8","value":"Oklahoma, Louisiana"},
{"user_id":"6","value":"Montana, Oregon"},
{"user_id":"10","value":"Virginia, Illinois"}];

function searcher(value) {
    for (var item in input) {
        var obj = input[item];
        var val_arr = obj["value"].split(",");
        for (var i = 0; i < val_arr.length; i++) {
            var cur = val_arr[i].trim();
            if (value == cur) {
                return obj["user_id"];
            }
        }
    }
}

alert(searcher("New Mexico"));

但是这是假设您的原始输入采用您指定的格式。如果您使用不同的输入格式,搜索可能会更容易或更快,但这取决于您。请注意,并非所有浏览器都完全支持 .trim,因此您需要包含一个 polyfill 或实现您自己的“trim”类型。我进行 trim 只是因为用“,”分割是最安全的,但这可能会在某些数组中留下空格,但在其他数组中则不会。如果您知道逗号后面的字符串中不会有空格,那么您可以忽略 trim 部分。这在你的代码中很奇怪,因为在某些地方你有类似 "92056,92054,92018" 但在其他地方,你有 "New Mexico, Mississippi, Washington" -注意空格的差异。

此外,如果您不需要使用 trim,您可以删除内部 for 循环并使用 if (val_arr.indexOf(value) > -1) { return obj["user_id"]; } 查看分割数组是否包含您正在搜索的项目。但要知道旧版 IE 不支持 Array.indexOf

关于php - 有没有办法搜索以逗号分隔的 json 属性并通过不同的属性名称返回成员 id?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13575050/

相关文章:

javascript - 为什么这个 ['3' |0 + 1] 按位不起作用?

javascript - 增强函数原型(prototype)以在执行之前调用给定函数

php - 使用 PHP 进行 CSV 到 MySQL 的 500 内部服务器错误

PHPUnit 和测试 CRUD 方法

javascript - getDisplayMedia() 在 Android 设备上无法正常工作

php - 我想知道是否有一种方法可以显示android studio中当前日志的特定数据和使用mysql数据库的用户

java - 调用 fillTable() 时出现 NullPointerException 错误

mysql - 无法理解mysql中查询的日期输出

php - WordPress is_home() || is_index() 可能吗?

php - 使用密码作为盐的 md5 散列?