如何使用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 = "";
}
答案 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