根据 SaurabhV 提供的答案(再次感谢!),我能够创建一个函数,该函数接受一个字符串并将每个字母依次替换为下划线。我希望这也可以帮助其他人!
function get_combination($string) {
// Pa = Pass, Pos = Character Position, Len = String Length
$str_arr = array($string);
$Len = strlen($string);
for ($Pa=0;$Pa<$Len;$Pa++) {
for($Pos=1;($Pos+$Pa)<=$Len;$Pos++) {
if($Pos+$Pa == $Len && $Pos<$Pa) {
array_push($str_arr, substr_replace($string, str_repeat('_', $Pos), $Pa, 1));
} else if($Pos+$Pa == $Len && $Pos>$Pa) {
// End of String
} else if($Pos == $Len || ($Len > 2 && $Pos == ($Len-1))) {
// Do nothing - $Pos is too high
} else if($Pos > $Len/2 && $Len > 6) {
array_push($str_arr, substr_replace($string, str_repeat('_', $Pos-4), $Pa, $Pos-4));
} else {
array_push($str_arr, substr_replace($string, str_repeat('_', $Pos), $Pa, $Pos));
}
}
}
return $str_arr;
}
例子:
$string = get_combination('dv6000');
回报:
Array ( [0] => dv6000 [1] => _v6000 [2] => __6000 [3] => ___000 [4] => ____00 [5] => d_6000 [6] => d__000 [7] => d___00 [8] => d____0 [9] => dv_000 [10] => dv__00 [11] => dv___0 [12] => dv6_00 [13] => dv6__0 [14] => dv6___ [15] => dv60_0 [16] => dv60__0 [17] => dv600_ )
现在,使用 MySQLi 和 foreach 循环,我可以针对数组搜索数据库,以获得与所要求的结果相似的结果。正如您在示例中看到的,“dv6000”是询问的字符串,但在 tbl_models(参见 OP)中没有 dv6000。一旦数据库达到索引 14 (dv6___),它将找到正确的条目:
SELECT model_number FROM tbl_models WHERE model_number LIKE %string[14]%
它很混乱,可能效率不高,但它确实有效。如果有人可以详细说明或帮助我整理此代码以使其更加简化,如果可能的话,我将不胜感激!