PHP变量意外结果

时间:2013-12-06 13:51:22

标签: php

我有以下代码:

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()它有结果时。

3 个答案:

答案 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无法使用关联数组:)