【发布时间】:2018-09-26 14:26:39
【问题描述】:
我设计了下面的代码,我使用爆炸来爆炸数据,
"10.74.10.1", "10.75.10.132"
但是我得到以下错误
"explode() 期望参数 2 是字符串,数组在行中给出.."
有人可以建议我的代码有什么问题吗?
这是我的完整代码:
public function pagesviewlogsAction()
{
// Checks authorization
$this->acl->doCheck($this);
-- language: lang-html --> // Validates request
$requestObj = new PagesviewlogEventRequest();
$requestObj->userid = (Utils::validatePattern(Utils::REGEXP_SECLOGS_USERID, (($json->userid) ?? FALSE) )) ? $json->userid:NULL;
$requestObj->clientip = array();
//if (isset($json->clientip) && $json->clientip != '' && $json->clientip != NULL) {
if (isset($json->clientip) && is_string($json->clientip)){
$tmp = explode(',', $json->clientip);
foreach ($tmp as $key => $ipValue) {
$requestObj->clientip[] = (Utils::validatePattern(Utils::REGEXP_SECLOGS_IP, ((trim($ipValue)) ?? FALSE) )) ? trim($ipValue):NULL;
}
}
}
foreach (get_object_vars($requestObj) as $key => $value) {
switch ($key) {
case 'clientip':
// ...
break;
default:
// Other cases
if ($value === FALSE) {
return new JsonModel([
'status' => 'FAILED',
'errorField' => $key,
'message'=> 'Parameters "' . $key . '" is missing or invalid.',
'data' => NULL
]);
}
break;
}
}
}
}
【问题讨论】:
-
"10.74.10.1", "10.75.10.132"不是字符串,因此您无法将其分解。它是一个数组的 2 个元素。因此你得到的错误。在您的情况下,您可以将 foreach 中的$tmp替换为$json->clientip,它应该可以工作。 -
看起来 clientip 已经是一个数组了。做一个
var_dump($json->clientip) -
取自 cmets 的答案:"preg_match() 期望参数 2 为字符串,数组在“ 中给出 - 嗯....that 在哪里i> 功能?
-
这是我的 validatePattern 函数 private static function _validatePattern($pattern, $value) { $validity = false; $validity = preg_match($pattern, $value);返回$有效性; }