我有一个客户端调用我用 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)
我尝试了不同的事情,但从未成功。我将不胜感激解决此问题的方法。