我有以下代码:
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()
它有结果时。
答案 0 :(得分:3)
list(...) = array
赋值仅在数组被索引时有效,但checkRules
返回一个关联数组。
你需要写:
$result = checkRules("register", $key, $value);
$pass = $result['pass'];
$errormessage = $result['errormessage'];
或更改checkRules
以返回索引数组(不是我的偏好 - 索引数组只应用于统一数据)。
你也可以写:
list($pass, $errormessage) = array_values(checkRules("register", $key, $value));
但我认为依赖于关联数组中元素的顺序通常是不好的做法。
答案 1 :(得分:2)
您将返回一个包含字符串键的数组。你需要返回一个带有数字索引的数组,如list
所期望的那样。
checkRules
应该返回[1, ""]
,不 array("pass" => 1, "errormessage" => "")
。
答案 2 :(得分:1)
更改这样的行:
list($pass, $errormessage) = array_values(checkRules("register", $key, $value));
list
无法使用关联数组:)