我在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。第一个char(1)表示类别,第二个char(B)表示子类别。给定的数组是客户端过滤器请求的结果。
答案 0 :(得分:2)
您可以在SQL中使用正则表达式:
SELECT * FROM list WHERE id REGEXP '^(1|3|4A|…)[0-9]+$'
括号内的值可以使用PHP函数implode('|', $filter_strings)
请注意,您应首先验证并转义过滤器字符串,以防止用户输入操纵查询。函数preg_quote
在这里很有用。