0

私は、構築中の Web サイト用に単純な 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 に答える