我正在尝试找出在json数组中查找值组合的最佳方法,如果存在,则返回错误消息。如果数组中不存在值的组合,则将它们发布到服务器。这是我到目前为止所拥有的。
JSON
[{
"username": "johnsmith@test.com",
"contest": "TV",
"timestamp": "Fri Nov 09 2018 16:33:38 GMT-0500 (Eastern Standard Time)"
}, {
"username": "bob@test2.com",
"contest": "Phone",
"timestamp": "Fri Nov 09 2018 18:33:51 GMT-0500 (Eastern Standard Time)"
}]
我正在使用ajax将详细信息发布到php,并且该部分效果很好。
$.ajax({
type: 'POST',
url: 'update.php',
data: { theuser: theuser, thecontest: thecontest, timestamp: timestamp },
success: function() {
//Show confirm notification hide btns and close the modal
$('.modalbtns').hide();
$('#successbox').fadeIn();
setTimeout(function() {
$('#ModalCenter').modal('hide')
}, 2400);
},
error: function() {
// do something on error
}
});
到目前为止,这就是我要使用的php(update.php)
<?php
$theuser = $_POST['theuser'];
$thecontest = $_POST['thecontest'];
$timestamp = $_POST['timestamp'];
if (is_writable('alldata.json')) {
$json = file_get_contents('alldata.json');
$data = json_decode($json);
$data[] = array('username'=> $theuser, 'contest' => $thecontest, 'timestamp' => $timestamp);
file_put_contents('alldata.json', json_encode($data));
} else {
//echo "file is not writable, check permissions";
}
?>
例如,我要实现的目标是
在发布之前,请检查json数组是否存在以下组合。 用户名= bob@test2.com AND竞赛=电话 如果存在,则将自定义消息返回到页面,例如(您已经注册)。 如果组合不在json数组中,请发布到文件中。
我相信它一定是
foreach($data as $item)
{
if($item->username == $username) || ($item->contest == $contest){
//combination found, do not post!
}
}
但是我无法正常工作,谢谢您的帮助!
答案 0 :(得分:1)
您必须通过以下方式更改后端PHP代码,
<?php
$theuser = $_POST['theuser'];
$thecontest = $_POST['thecontest'];
$timestamp = $_POST['timestamp'];
if (is_writable('alldata.json')) {
$json = file_get_contents('alldata.json');
$data = json_decode($json, true);
$flag = false;
foreach($data as $d){
if($d['username'] == $theuser && $d['contest'] == $thecontest){
$flag = true;
break;
}
}
if(!$flag){
$data[] = array('username'=> $theuser, 'contest' => $thecontest, 'timestamp' => $timestamp);
file_put_contents('alldata.json', json_encode($data));
}else{
// echo "you are already registered for the contest";
}
} else {
// echo "file is not writable, check permissions";
}
?>
所需更改的摘要:
true
传递给json_decode()
函数,以将返回的对象转换为关联数组。&&
条件而不是||
来检查用户是否已注册特定竞赛。 $flag
和foreach
循环检查用户是否已注册,如果已经注册,则显示一条简单消息,如果未注册,则将用户数据附加到json字符串中。 答案 1 :(得分:0)
您可以简单地创建一个函数来进行检查并使用循环代码:
<?php
function check_combination($data){
foreach($data as $item)
{
if($item->username == $username) || ($item->contest == $contest){
return false; //if match found function will return by breaking the loop.
}
}
return true; //it will be returned after all the values are iterated.
}
check_combination($data);
但是请注意,如果您的数据太大,可能会导致性能问题,那么将需要一种更好的方法。