我想要一个使用与mysql something LIKE '%something%'
我想在php中构建一个if语句。
if ($something is like %$somethingother%)
有可能吗?
我提出这个问题的原因是我不想改变MySQL命令,它是一个包含许多内容的长页面,我不想为此构建不同的功能。
如果可能的话,请告诉我,如果可能,请告诉他们如何做。
答案 0 :(得分:25)
if($ something就像%$ somethingother%)
有可能吗?
没有
我不想更改MySQL命令,它是一个包含许多内容的长页面
使用一些好的编辑器,它支持find& amp;中的正则表达式。替换,并将其转换为:
if(stripos($something, $somethingother) !== FALSE){
}
答案 1 :(得分:16)
我知道,这个问题不是实际的,但我已经解决了类似的问题:)
我的解决方案:
/**
* SQL Like operator in PHP.
* Returns TRUE if match else FALSE.
* @param string $pattern
* @param string $subject
* @return bool
*/
function like_match($pattern, $subject)
{
$pattern = str_replace('%', '.*', preg_quote($pattern, '/'));
return (bool) preg_match("/^{$pattern}$/i", $subject);
}
示例:
like_match('%uc%','Lucy'); //TRUE
like_match('%cy', 'Lucy'); //TRUE
like_match('lu%', 'Lucy'); //TRUE
like_match('%lu', 'Lucy'); //FALSE
like_match('cy%', 'Lucy'); //FALSE
答案 2 :(得分:4)
查看strstr函数
答案 3 :(得分:2)
使用函数,在另一个字符串中搜索字符串,如:strstr
,strpos
,substr_count
。
答案 4 :(得分:1)
strpos()不起作用,所以我必须使用此preg_match()
$a = 'How are you?';
if (preg_match('/\bare\b/', $a)) {
echo 'true';
}
像这样,例如我与单词“ are”匹配 希望对某人有帮助
答案 5 :(得分:0)
但你必须给小写字符串然后它会正常工作。 strstr函数示例:
$myString = "Hello, world!";
echo strstr( $myString, "wor" ); // Displays 'world!'
echo ( strstr( $myString, "xyz" ) ? "Yes" : "No" ); // Displays 'No'
答案 6 :(得分:0)
使用此函数,其功能类似于SQL LIKE 运算符,但它将返回布尔值,并且您可以再使用一个if语句来设置自己的条件
function like($str, $searchTerm) {
$searchTerm = strtolower($searchTerm);
$str = strtolower($str);
$pos = strpos($str, $searchTerm);
if ($pos === false)
return false;
else
return true;
}
$found = like('Apple', 'app'); //returns true
$notFound = like('Apple', 'lep'); //returns false
if($found){
// This will execute only when the text is like the desired string
}
答案 7 :(得分:0)
如果您有权访问MySQL服务器,请使用MySQLi发送这样的查询:
$SQL="select case when '$Value' like '$Pattern' then 'True' else 'False' end as Result";
$Result=$MySQLi->query($SQL)->fetch_all(MYSQLI_ASSOC)[0]['Result'];
结果将是一个包含True或False的字符串。让PHP发挥自己的优势,并使用SQL进行点赞。
答案 8 :(得分:0)
我最近遇到了这个要求,并想到了:
/**
* Removes the diacritical marks from a string.
*
* Diacritical marks: {@link https://unicode-table.com/blocks/combining-diacritical-marks/}
*
* @param string $string The string from which to strip the diacritical marks.
* @return string Stripped string.
*/
function stripDiacriticalMarks(string $string): string
{
return preg_replace('/[\x{0300}-\x{036f}]/u', '', \Normalizer::normalize($string , \Normalizer::FORM_KD));
}
/**
* Checks if the string $haystack is like $needle, $needle can contain '%' and '_'
* characters which will behave as if used in a SQL LIKE condition. Character escaping
* is supported with '\'.
*
* @param string $haystack The string to check if it is like $needle.
* @param string $needle The string used to check if $haystack is like it.
* @param bool $ai Whether to check likeness in an accent-insensitive manner.
* @param bool $ci Whether to check likeness in a case-insensitive manner.
* @return bool True if $haystack is like $needle, otherwise, false.
*/
function like(string $haystack, string $needle, bool $ai = true, bool $ci = true): bool
{
if ($ai) {
$haystack = stripDiacriticalMarks($haystack);
$needle = stripDiacriticalMarks($needle);
}
$needle = preg_quote($needle, '/');
$tokens = [];
$needleLength = strlen($needle);
for ($i = 0; $i < $needleLength;) {
if ($needle[$i] === '\\') {
$i += 2;
if ($i < $needleLength) {
if ($needle[$i] === '\\') {
$tokens[] = '\\\\';
$i += 2;
} else {
$tokens[] = $needle[$i];
++$i;
}
} else {
$tokens[] = '\\\\';
}
} else {
switch ($needle[$i]) {
case '_':
$tokens[] = '.';
break;
case '%':
$tokens[] = '.*';
break;
default:
$tokens[] = $needle[$i];
break;
}
++$i;
}
}
return preg_match('/^' . implode($tokens) . '$/u' . ($ci ? 'i' : ''), $haystack) === 1;
}
/**
* Escapes a string in a way that `UString::like` will match it as-is, thus '%' and '_'
* would match a literal '%' and '_' respectively (and not behave as in a SQL LIKE
* condition).
*
* @param string $str The string to escape.
* @return string The escaped string.
*/
function escapeLike(string $str): string
{
return strtr($str, ['\\' => '\\\\', '%' => '\%', '_' => '\_']);
}
上面的代码是unicode感知的,能够捕获以下情况:
like('Hello ?', 'Hello _'); // true
like('Hello ?', '_e%o__'); // true
like('asdfas \\?H\\\\%?É\\l\\_?\\l\\o asdfasf', '%' . escapeLike('\\?h\\\\%?e\\l\\_?\\l\\o') . '%'); // true
您可以在https://3v4l.org/O9LX0上尝试所有这些操作
答案 9 :(得分:0)
我认为值得一提的是 PHP 8 中可用的 str_contains()
函数,它执行区分大小写的检查,指示一个字符串是否包含在另一个字符串中,返回 true 或 false。 >
从文档中获取的示例:
$string = 'The lazy fox jumped over the fence';
if (str_contains($string, 'lazy')) {
echo "The string 'lazy' was found in the string\n";
}
if (str_contains($string, 'Lazy')) {
echo 'The string "Lazy" was found in the string';
} else {
echo '"Lazy" was not found because the case does not match';
}
//The above will output:
//The string 'lazy' was found in the string
//"Lazy" was not found because the case does not match
请参阅完整文档 here。
答案 10 :(得分:0)
like_match() 例子是最好的 这个女巫 SQL 请求很简单(我之前使用过它),但是当您按数组键迭代时,like_match() 和 exost 数据库服务器资源的工作速度很慢,并且每轮命中数据库服务器时通常不需要请求。我通过模式元素让它更快地切割/收缩阵列,但阵列上的正则表达式总是更快。 我喜欢like_match() :)