Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php数组到MySQL查询条件结构_Php_Mysql_Arrays_Regex_Filtering - Fatal编程技术网

Php数组到MySQL查询条件结构

Php数组到MySQL查询条件结构,php,mysql,arrays,regex,filtering,Php,Mysql,Arrays,Regex,Filtering,我在PHP中有以下数组: $arr = [1, 3, '4A', '5A', '5C', '2B', '2C', '2E']; 不知何故,我需要将此数组转换为如下所示的字符串: $filter = "(id like '1%') OR (id like '3%') OR (id like '4A%') OR (id like '5A%' OR id like '5C%') OR

我在PHP中有以下数组:

$arr = [1, 3, '4A', '5A', '5C', '2B', '2C', '2E'];
不知何故,我需要将此数组转换为如下所示的字符串:

 $filter =     "(id like '1%') OR 
                (id like '3%') OR 
                (id like '4A%') OR 
                (id like '5A%' OR id like '5C%') OR 
                (id like '2B%' OR id like '2C%' OR id like '2E%')";
数组值的第一个字符表示唯一的类别,并用括号括起来。 最后我将使用它来查询数据库

$sql = "SELECT * FROM list WHERE {$filter}";
有人能帮我把这个数组转换成正确的字符串吗?实现这一目标的最佳方法是什么?

让您了解我正在尝试的内容:
“我的数据库”行中的“id”列如下所示;1B2875。其中,第一个字符(1)表示类别,第二个字符(B)表示子类别。给定的数组是客户端筛选器请求的结果

您可以在SQL中使用正则表达式:

从id REGEXP'^(1 | 3 | 4A |…)[0-9]+$”的列表中选择*

括号内的值可以通过PHP函数
内爆('|',$filter\u strings)


请注意,您应该首先验证并转义过滤器字符串,以防止用户输入操纵查询。函数
preg\u quote
在这里很有用。

非常感谢使用MySQL端的regexp进行开箱思考。如果还不算太晚,我真的建议对其进行规范化,并使用与
类别的关系,只需将
ID
设置为一个自动递增整数。你现在使用的这个设置可能会在以后造成很多伤害。