我如何将 ip 地址值从数据库拆分为 CodeIgniter 中的数组格式

how do i split ip address value from database into the array format in CodeIgniter

我正在开发 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);  
}

您可以使用 explode 来拆分字符串和 return 数组中的项目

$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))

您可以使用 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 更改为数据库中的值。使用 deimter 和可选的封闭参数允许它从数据中删除额外的引号。