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]%
面倒で、おそらくあまり効率的ではありませんが、機能します。誰かがこのコードを詳しく説明したり、もっと単純化するために私を助けてくれるなら、可能であれば、私はそれをいただければ幸いです!