根據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]%
它的混亂,可能不是很有效,但它的作品。如果任何人都可以詳細說明,或者可能幫助我清理這些代碼,使其更簡化,如果可能的話,我會很感激!
查看http://stackoverflow.com/questions/13114398/how-can-i-match-two-strings-even-if-they-are-1-character-different/13114599 – Aea
檢查[this](http ://stackoverflow.com/a/3339034/913097)並在這裏進行搜索。有很多。 – inhan
根據代碼欄中有多少個字符,您可以使用lik'%C7 ____%' – Taicho