我有以下代码:
include_once("../content/includes/connect.php");
include_once("_functions.php");
//TODO: support sending variables
$check = true;
$callback = "error";
foreach ($_GET as $key => $value) {
echo "Key: {$key}<br>";
echo "Value: {$value}<br>";
echo "<pre>";
print_r(checkRules("register", $key, $value));
echo "</pre>";
list($pass, $errormessage) = checkRules("register", $key, $value);
echo "Pass: {$pass}<br>";
echo "Errormessage: {$errormessage}<br><br>";
if (!$pass) {
$check = false;
$callback = "error";
break;
}
}
if ($check) {
$callback = "register_success";
}
echo json_encode(array(
"callback" => $callback
));
SQL::close();
这给了我以下HTML页面:
Key: email
Value: a@a.aa
Array
(
[pass] => 1
[errormessage] =>
)
Pass:
Errormessage:
{"callback":"error"}
现在我不明白为什么list($pass, $errormessage) = checkRules("register", $key, $value);
不起作用,当我清楚地看到print_r()
有结果时。
list(...) = array
赋值仅在数组被索引时有效,但checkRules
返回关联数组。
你需要写:
$result = checkRules("register", $key, $value);
$pass = $result['pass'];
$errormessage = $result['errormessage'];
或者更改checkRules
以返回索引数组(不是我的偏好——索引数组应仅用于统一数据)。
你也可以写:
list($pass, $errormessage) = array_values(checkRules("register", $key, $value));
但我认为依赖于关联数组中元素的顺序通常是不好的做法。
您返回的是一个带有字符串键的数组。您需要返回一个带有数字索引的数组,正如list
所期望的那样。
checkRules
应该返回[1, ""]
,而不是array("pass" => 1, "errormessage" => "")
。
像这样更改行:
list($pass, $errormessage) = array_values(checkRules("register", $key, $value));
list
无法与关联数组一起工作:)