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)
さまざまなことを試しましたが、成功することはありませんでした。この問題を解決するためのアプローチのようなものをいただければ幸いです。