Domanda

Ho un elenco di aree codice postale (solo parte sinistra solo) come sotto:

IV1-28,IV30-32,IV36,IV40-49,IV52-56,IV63,KW1-3,KW5-14,PA21-38,PH1-26,PH30-41,PH49-50,LD1-99,SY16-20,SY23-25
.

Il mio input è un codice postale del Regno Unito ad esempio.IV21

Ho bisogno di una funzione PHP per verificare se il codice postale di input (ad es. IV21) è nell'elenco.

Questo sarebbe abbastanza semplice, ma l'elenco è nel modulo IV1-28 al contrario di essere una lista "normale" come IV1,IV2,IV3,IV4,IV5,IV6...IV26,IV27,IV28 ecc.

Aiuto è molto apprezzato.Grazie in anticipo.

È stato utile?

Soluzione

Loop attraverso una serie di codici e si divide nel numero, quindi controlla se quel numero è compreso nell'intervallo

$list = array("IV1-28","AB1-10");
$found = false;
$input = "AB10";
$inputCode = substr($input,0,2);
$inputNumber = substr($input,2);
foreach ($list as $l)
{
    $lCode = substr($l,0,2);
    $lNumber = substr($l,2);
    $listNumbers = explode("-",$lNumber);
    if (($inputNumber >= $listNumbers[0]) && ($inputNumber <= $listNumbers[1]) && ($inputCode==$lCode))
    {
        $found = true;
        break;
        }           
}

var_dump($found);
.

Altri suggerimenti

Usa la funzione Strpos.Restituisce Int se trovato o falso.Si noti che corrispondere a IV1 darebbe vero anche di IV11.Quindi usa il seguente script

$code="IV21";
$list="IV1-..........etc";
if(strpos($list,$code."-") || strpos($list,$code.",") { 
//true
}
else {
//false 
}
.

Il "-" e "," è quello di garantire che la stringa finisca in modo che IV11 non darà true se cerchiamo IV1

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top