如何使用php的内爆函数分隔数组字符串定界符(|)

时间:2019-04-12 07:13:08

标签: php mysql

如何使用PHP的内爆函数分隔数组字符串定界符(|),如下所示

  

| Java || PHP ||引导程序|| HTML || CSS |

实际上,我使用双定界符来区分SQL和MySQL之类的标记,因为LIKE "%sql%"也会返回MySQL结果。应该是LIKE "%|sql|%"

我尝试过的事情:

$array_service_offer = array();
if (isset($_POST['service_offer'])) {
    foreach ($_POST['service_offer'] as $selectedOption) {
        array_push($array_service_offer, $selectedOption);
    }
    //$service_offer = implode(',',$array_service_offer);
    $service_offer = '|' . implode('||', $array_service_offer) . '|';
} else {
    $service_offer = "";
}

1 个答案:

答案 0 :(得分:0)

首先,根据@Qirel的评论,我还建议使用$array_service_offer[] = $selectedOption;代替array_push($array_service_offer, $selectedOption);

现在要分离,有几种解决方案。

一种解决方案是: 1-删除第一个和最后一个|字符(就像修剪) 2-使用||爆炸修剪过的弦分隔符

为此,您可以使用以下代码:

$service_offer_trimmed = preg_replace("~(^\|)|(\|$)~", "", $service_offer);
$service_offer_array = explode('||', $service_offer_trimmed);

另一种解决方案是使用直接的 preg_replace 函数来分隔字符串。命令如下:

$service_offer_array = preg_split("~(^\|)|(\|\|)|(\|$)~", $service_offer, 0, PREG_SPLIT_NO_EMPTY);

另一种专业的解决方案是将数据以 JSON 格式而不是用分隔代码存储在数据库中,然后当您需要在数据库中搜索时,可以使用MySql JSON_CONTAINS 功能,而不是 Like 命令。 我没有亲自对这两种解决方案进行性能检查,但是如果它不是一个大数据库,那么它也不是一个大问题。

因此,获取数据并将其存储到数据库中的初始代码将是:

$array_service_offer = array();
if (isset($_POST['service_offer'])) {
    foreach ($_POST['service_offer'] as $selectedOption) {
        $array_service_offer[] = $selectedOption;
    }
}
// $json_service_offer will be saved to the database 
$json_service_offer = json_encode($array_service_offer);

有关如何使用 JSON_CONTAINS 的手册位于以下链接中: 12.17.3 Functions That Search JSON Values