我正在开发CodeIgniter应用程序,希望将IP地址拆分为数组格式。实际上,我从数据库列中获取值,但无法从数据库中获取的动态值创建数组?
控制器代码
Getting Values from the database
$system = $this->Xin_model->read_enter_allow_ip_address_info(1);
$allowlist = array($system[0]->enter_allow_ip_address);
$finalipallow = nl2br($allowlist);
if(!in_array($_SERVER['REMOTE_ADDR'],$finalipallow)){
$Return['error'] = 'Login Failed';
$this->output($Return);
}
模型查询
public function read_enter_allow_ip_address_info($id) {
$condition = "setting_id =" . "'" . $id . "'";
$this->db->select('enter_allow_ip_address');
$this->db->from('xin_system_setting');
$this->db->where($condition);
$this->db->limit(1);
$query = $this->db->get();
return $query->result();
}
数据库列的动态值
'10.0.0.1','10.0.0.2','10.0.0.3','::1'
如何将数据库中的IP地址值拆分为像这个静态数组这样的数组格式
$finalipallow = array(
'10.0.0.1',
'10.0.0.2',
'10.0.0.3',
'::1'
);
我有一个使用if condition
的静态数组,但我想像静态数组一样将动态值转换为数组?
现在在这里工作它的解决方案
$system = $this->Xin_model->read_enter_allow_ip_address_info(1);
$allowlist = $system[0]->enter_allow_ip_address;
$finalipallow = str_getcsv($allowlist, ",", "'");
if(!in_array($_SERVER['REMOTE_ADDR'],$finalipallow)){
$Return['error'] = 'Login Failed';
$this->output($Return);
}
您可以使用str_getcsv()
将其处理为CSV记录。。。
$data = "'10.0.0.1','10.0.0.2','10.0.0.3','::1'";
$finalipallow = str_getcsv($data, ",", "'");
print_r($finalipallow);
其输出。。。
Array
(
[0] => 10.0.0.1
[1] => 10.0.0.2
[2] => 10.0.0.3
[3] => ::1
)
只需将$data
更改为数据库中的值即可。使用设计和可选的封闭参数可以从数据中去掉多余的引号。
您可以使用explode
,它将拆分字符串并返回数组中的项
$newArray = explode(',',$dbString);
print_r($newArray);
<--你可以查看数据
$dbString= "'10.0.0.1','10.0.0.2','10.0.0.3','::1'";
$newArray = explode(',',$dbString);
print_r($newArray);
输出:Array ( [0] => '10.0.0.1' [1] => '10.0.0.2' [2] => '10.0.0.3' [3] => '::1' )
您将需要用空字符串替换'
,因为我可以看到您正在比较确切的IP和数组。你可以这样做:
$dbString= "'10.0.0.1','10.0.0.2','10.0.0.3','::1'";
$dbString= str_replace("'", "", $dbString);
$newArray = explode(',',$dbString);
print_r($newArray);
或者您可以更改
`if(!in_array($_SERVER['REMOTE_ADDR'],$newArray)`)
至
if(!in_array("'".$_SERVER['REMOTE_ADDR']."'",$newArray))