0

我正在为我正在构建的网站编写一个简单的 AJAX/jquery CMS。为了简化一切,我只想向 URL 发出请求以执行操作(很像 Magento 所拥有的 - 但我有理由不使用 Magento/其他现有选项)

问题是 while 循环没有结束(在编写 PHP 文档时我所在的位置超时了,所以我无法访问它们)。

<?php
$query = explode('/',parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH));
$qs = array();
foreach ($query as $key=>$value) $qs[$key] = urldecode(htmlspecialchars($value));

# /action/{$class-name}/{$action}/{$field1}/{$param1}/{$field2}/{$param2}/.../{$fieldN}/{$paramN}
# e.g.
# /action/QuickOverview/get/internal_name/value
# /action/QuickOverview/update/internal_name/value1/title/value2/

$params = array();
array_shift($qs);
switch ($val = array_shift($qs)) {
    case "action":
        $className = array_shift($qs);
        $action = array_shift($qs);
        $field = true;
        while ($val=array_shift($qs)!==false) {
            if ($field) $params[-1] = $val;
            else $params[$params[-1]] = $val;
            $field = !$field;
        }
        unset($params[-1]);
        break;
    default:
        var_dump("Unknown value: ".$val);
        break;
}

var_dump($params);
?>

页面超时(可能永远循环),我怎样才能正确结束这个while循环?

4

1 回答 1

0

=是一个赋值运算符,不应该用于条件检查,这种情况在while循环中。

尝试:

switch ($val = array_shift($qs)) {
case "action":
    $className = array_shift($qs);
    $action = array_shift($qs);
    $field = true;
    while ($val == array_shift($qs)) {
        if ($field) $params[-1] = $val;
        else $params[$params[-1]] = $val;
        $field = !$field;
    }
    unset($params[-1]);
    break;
default:
    var_dump("Unknown value: ".$val);
    break;
}
于 2012-12-03T16:45:49.090 回答