php - PHP - 如何查询 JSON 文件的多个值?
问题描述
我正在使用纯 PHP 和 JS 构建 JSON 后端,不涉及 MySQKL,我需要知道是否可以多次查询相同的 JSON 键模式。
所以,这是我的 JSON 文件:
[
{
"id": "WWJaePyv9a",
"string": "aaa",
"number": 123.89,
"aArray": [
"aa",
"bb",
"cc"
],
"bool": true,
"geocoords": [
"1.23456",
"-33.76584"
]
},
{
"id": "vXMv68ze8K",
"string": "bbb",
"number": 1.64,
"aArray": [
"yyy",
"ppp"
],
"bool": false,
"geocoords": [
""
]
},
{
"id": "Imd6oPVYtP",
"string": "ccc",
"number": 0,
"aArray": [
""
],
"bool": false,
"file": "",
"geocoords": [
""
]
}
]
这是我的 PHP 脚本:
<?php
$className = basename(__DIR__) ;
/* GET variables */
$string = $_GET['string'];
$aArray = $_GET['aArray'];
$number = $_GET['number'];
$bool = $_GET['bool'];
if( $bool == 'true'){ $bool = true; } else if($bool == 'false'){ $bool= false; }
$data = file_get_contents($className. '.json');
$data_array = json_decode($data, true);
$results = array();
foreach ($data_array as $obj) {
// check value in string
if(isset($string)){
if (strpos($obj['string'], $string) !== false) {
// $results[$obj['id']] = $obj;
array_push($results, $obj);
}
}
// check element in array
if(isset($aArray)){
if (in_array($aArray, $obj['aArray'])) {
// $results[$obj['id']] = $obj;
array_push($results, $obj);
}
}
// check value in number
if(isset($number)){
if ($obj['number'] == (float)$number) {
// $results[$obj['id']] = $obj;
array_push($results, $obj);
}
}
// check value in bool
if(isset($bool)){
if ($obj['bool'] == $bool) {
// $results[$obj['id']] = $obj;
array_push($results, $obj);
}
}
}// ./ for
// echo results
echo json_encode(array_values($results), JSON_PRETTY_PRINT);
?>
这是我粘贴在 Chrome 中以测试 PHP 脚本的查询 URL:
https://example.com/query.php?string=aaa&string=bbb
不幸的是,我只得到我的 JSON 文件的最后一个数组对象,它具有“ bbb
”作为“ string
”键的值:
[ { "id": "vXMv68ze8K", "string": "bbb", "number": 1.64, "aArray": [ "yyy", "ppp" ], "bool": false, "geocoords": [ "" ] } ]
相反,我需要获取具有“ aaa
”作为“”键的值的对象以及“ string
”键的值bbb
,如下所示:
[
{ "id": "WWJaePyv9a", "string": "aaa", "number": 123.89, "aArray": [ "aa", "bb", "cc" ], "bool": true, "geocoords": [ "1.23456", "-33.76584" ]
},
{ "id": "vXMv68ze8K", "string": "bbb", "number": 1.64, "aArray": [ "yyy", "ppp" ], "bool": false, "geocoords": [ "" ]
}
]
这可能吗?我是在代码中做错了什么,还是在查询 URL 的语法中做错了什么?
解决方案
感谢对此问题的许多评论,我可以使用以下代码解决问题:
if(isset($string)){
foreach ($string as $k=>$value) {
if ($obj['string'] == $value) {
array_push($results, $obj);
}
}
}
if(isset($number)){
foreach ($number as $k=>$value) {
if ($obj['number'] == $value) {
array_push($results, $obj);
}
}
}
if(isset($aArray)){
foreach ($aArray as $k=>$value) {
if (in_array($value, $obj['aArray'])) {
array_push($results, $obj);
}
}
}
if(isset($bool)){
foreach ($bool as $k=>$value) {
if ($obj['bool'] == $value) {
array_push($results, $obj);
}
}
}
因此,使用这样的 URL:
https://example.com/query.php?string[]=aaa&string[]=ccc&aArray[]=ppp
使我能够得到我正在寻找的结果。
推荐阅读
- terminal - 清除屏幕使输入超过 GnuCOBOL 中的输出
- angular - Spring Security 防止多次登录
- css - 叙利亚文脚本未在 CSS 中连接
- sql - SQL:在redshift的另一列中查找是否有10个连续日期具有特定值
- c# - 使用 JWT 的 SignIn 事件
- docker - RTNETLINK answers: Operation not permitted - Docker Swarm
- java - How to create new file after building jlink app?
- javascript - Typescript - Filter does not work on arrays of union types
- javascript - 使用 indexOf 搜索 JSON 对象返回未定义
- php - Check if shipping method is available for the country WooCommerce