我希望我的解释是正确的;例如,我想要匹配值的 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);
最佳答案
这似乎符合您的要求?:
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/