我想将输入字符串匹配到我的PHP页面,就像通过SQL(MySQL)中的LIKE命令所做的匹配一样,以确保其他搜索的一致性。由于(我已经看过但不理解)某些PHP语法包含SQL命令,所以我想知道这是否可能吗?
这样做的原因是,我现在正在实现对关键字的搜索,而不是对存储在序列化数组中的数据库中的字段的搜索,我必须在PHP中对其进行反序列化,并根据数组的结构进行搜索。我无法针对该表进行查询,只需要查询的匹配功能即可。否则,我需要找到一个替代的匹配例程,这将是不一致的。我不能回过头来重新构建数据库,因为在规范中并没有预料到这点。是的,我需要一个难看的技巧,但是我正在寻找最优雅的东西。
如果不可能的话,我可以使用将用户键入的文本匹配为存储文本的关键字的任何建议。
编辑(为澄清起见):我的主要问题是我对LIKE命令的工作方式没有足够的了解(仅复制代码),并且由于关键字暗示了某种程度的模糊性,如果我改用,我希望保留这种模糊性正则表达式。我对regex的好点是更好。我的查询是“喜欢’matchme%’”
根据tomalak的评论和OIS使用preg_grep的绝妙想法,这可能更符合最终解决方案的要求。
<?php function convertLikeToRegex( $command ) { return "/^" . str_replace( '%', '(.*?)', preg_quote( $command ) ) . "$/s"; } function selectLikeMatches( $haystack, $needle ) { return preg_grep( convertLikeToRegex( $needle ), $haystack ); } $likeClauses = array( '%foo' ,'foo%' ,'%foo%' ); $testInput = array( 'foobar' ,'barfoo' ,'barfoobaz' ); foreach ( $likeClauses as $clause ) { echo "Testing $clause:"; echo '<pre>'; print_r( selectLikeMatches( $testInput, $clause ) ); echo '</pre>'; }
这是您追求的目标吗?
<?php function convertLikeToRegex( $command ) { return "/^" . str_replace( '%', '(.*?)', $command ) . "$/s"; } $likeClauses = array( '%foo' ,'foo%' ,'%foo%' ); $testInput = array( 'foobar' ,'barfoo' ,'barfoobaz' ); foreach ( $testInput as $test ) { foreach ( $likeClauses as $clause ) { echo "Testing '$test' against like('$clause'): "; if ( preg_match( convertLikeToRegex( $clause ), $test ) ) { echo 'Matched!'; } else { echo 'Not Matched!'; } echo '<br>'; } echo '<hr>'; }