Проблема в том, что в l oop шаблон всегда одинаков:
if ( preg_match( "/2347890.*$/i", $zip ) ) {
Я думаю, что вы хотели использовать значение $zip
как часть шаблона, который вызывает проблему, повторяющую последний раз git 0+ раз в:
if ( preg_match( "/234*.*$/i", $zip ) ) {
^^
В качестве альтернативы, вы также можете извлечь цифры из $zip_codes
, используя группу захвата и соответствуйте необязательному следующему цифры.
$zip_codes = array( '12556', '765547', '234*', '987*', '237' );
$target_zip = '2347890';
foreach($zip_codes as $zip ) {
$digitsOnly = preg_replace("~^(\d+)\**$~", "$1", $zip);
if (strpos($target_zip, $digitsOnly) === 0) {
echo "$zip matched $target_zip" . PHP_EOL;
break;
}
else {
echo "$zip not matched $target_zip" . PHP_EOL;
}
}
Выход
12556 not matched 2347890
765547 not matched 2347890
234* matched 2347890
Php демо