3

我有一个客户端调用我用 PHP 编写的 Web 服务。在调用它时,客户端应用程序会向它提供一个小查询字符串。我想将此字符串解析为一个数组。因此,使用 url 中给定的示例查询,我开始这样做:

Url: $select=substringof("customer", tolower(toupper(bla))),test$filter=Name%20eq%20'test'%20and%20toupper(Name)$skip=10$top=2$orderby=day(time)%20desc

.

<?php
function parseOdataRequest($request)
{
    $expression = array();

    // Fetch parameters
    $params = explode('$', $request);

    // Leave empty parameter name alone
    unset($params[0]);
    $params = array_values($params);

    // Check every parameter
    for($i = 0; $i < count($params); $i++)
    {
        // every parameter has to be a name=value pair!
        $param = explode('=', $params[$i]);         


        if(!(count($param) == 2))
            throw new Exception("Invalid parameter. Providence must be name=value");


        // Validate parameter name
        if(in_array($param[0], $this->validParams))
        {                           
            $parseParam = 'parse' . ucfirst(strtolower($param[0]));
            $expression[$param[0]] = $this->$parseParam($param[1]);             
        }
        else            
            throw new Exception("Unkown parameter '" . $param[0] . "'");            
    }
    var_dump($expression);
}
?>

结果,我有以下 $ 表达式:

array (size=5)
  'select' => null
  'filter' => null
  'skip' => null
  'top' => null
  'orderby' => null

我想要的是如下内容:

 array (size=5)
  'select' => 
    array (size=2)
      'substringof' => 
        array (size=2)
          0 => string 'customer' (length=8)
          'tolower' => 
            array (size=1)
              'toupper' => 
                array (size=1)
                  0 => string 'bla' (length=3)
      0 => string 'test' (length=4)
  'filter' => 
    array (size=3)
      0 => 
        array (size=3)
          0 => string 'Name' (length=4)
          1 => string 'eq' (length=2)
          2 => string ''test'' (length=6)
      1 => string 'and' (length=3)
      2 => 
        array (size=3)
          'toupper' => 
            array (size=1)
              0 => string 'Name' (length=4)
          0 => string 'eq' (length=2)
          1 => string ''TEST'' (length=6)
  'skip' => int 10
  'top' => int 2
  'order' => 
    array (size=1)
      0 => 
        array (size=2)
          'day' => 
            array (size=1)
              0 => string 'time' (length=4)
          0 => string 'desc' (length=4)

我尝试了不同的事情,但从未成功。我将不胜感激解决此问题的方法。

4

0 回答 0