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);
}
?>

その結果、次の $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