Php 检查邮政编码是否在多个数组中?

Php 检查邮政编码是否在多个数组中?,php,arrays,Php,Arrays,我有3个不同的区域,我的区域1,我的区域2,我的区域3。其中每个都有一组邮政编码: $myArea1=array("AB1","AC2","AD1"); $myArea2=array("BC1","BC2","BC3"); $myArea3=array("CD1","CD2","CD3"); 我需要检查的邮政编码如下“BC2 4YZ” 以下内容不起作用,因为它检查是否完全匹配: if (in_array($row['postcode'], $myArea1)) { $Area = 'Area

我有3个不同的区域,我的区域1,我的区域2,我的区域3。其中每个都有一组邮政编码:

$myArea1=array("AB1","AC2","AD1");
$myArea2=array("BC1","BC2","BC3");
$myArea3=array("CD1","CD2","CD3");
我需要检查的邮政编码如下“BC2 4YZ”

以下内容不起作用,因为它检查是否完全匹配:

if (in_array($row['postcode'], $myArea1)) { $Area = 'Area 1'; }
else if (in_array($row['postcode'], $myArea2)) { $Area = 'Area 2'; }    
else if (in_array($row['postcode'], $myArea3)) { $Area = 'Area 3'; }
else { $Area = 'No Match'; }
我有以下几点是有效的:

foreach ($myArea1 as $myArea1pc) {
    if (strpos($row['postcode'],$myArea1pc) !== false) {
        $Area = 'Area 1';                   
    }
}
但是,是否有一种方法可以对我的所有阵列循环此操作


编辑:在我的数组中有时可能会出现诸如“BC24”之类的邮政编码。

为此,我会尝试在数组中使用

$input = $row['postcode'];

$areas = array(
    'Area 1' => array("AB1","AC2","AD1"),
    'Area 2' => array("BC1","BC2","BC3"),
    'Area 3' => array("CD1","CD2","CD3"),
);

// Take out the first 3 letter:
$part = substr(trim(str_replace(' ', '', $input)), 0, -3);

$Area = 'No match';
// Find which "area" array contains it
foreach ($areas as $k => $v) {
    if (in_array($part, $v)) {
        $Area = $k;
        break;
    }
}

我会尝试在数组中使用

$input = $row['postcode'];

$areas = array(
    'Area 1' => array("AB1","AC2","AD1"),
    'Area 2' => array("BC1","BC2","BC3"),
    'Area 3' => array("CD1","CD2","CD3"),
);

// Take out the first 3 letter:
$part = substr(trim(str_replace(' ', '', $input)), 0, -3);

$Area = 'No match';
// Find which "area" array contains it
foreach ($areas as $k => $v) {
    if (in_array($part, $v)) {
        $Area = $k;
        break;
    }
}

$row['postcode']
是否包含字符串
“BC2 4YZ”
?@RomanPerekhrest是的,每行中的字符串明显不同,但在该示例中,它是BC2 4YZ,可能是BC24YZ、BC2 4YX、BC24YZ等,但它将包含BC2。它应该在所有数组中找到匹配项还是在第一次出现时停止?@RomanPerekhrest行中只有一个邮政编码,一旦找到匹配项,它就不需要继续,同样,如果我的任何数组中没有匹配项,我只希望$Area的值为“不匹配”。是否
$row['postcode']
包含字符串
“BC2 4YZ”
?@RomanPerekhrest Yes,这在每行中明显不同,但在该示例中,它是BC2 4YZ,可能是BC24YZ、BC2 4YX、BC24YZ等,但它将包含BC2。它应该在所有数组中找到匹配项还是在第一次出现时停止?@RomanPerekhrest行中只有一个邮政编码,一旦找到匹配项,它就不需要继续,同样,如果我的任何数组中没有匹配项,我只希望$Area的值为“no match”。唯一的问题是,这是我的错,因为我没有在原始帖子中提到它,有时邮政编码的第一部分可能有4个字符,例如“BC24 4YX”,拿前3个字符来看,它总是被空格隔开吗?不总是bud,有时它根本不会分开。我一直在玩你所做的事情,想知道这样的东西是否可行:
foreach($a=>b){foreach($b as$c){if(strpos($row['postcode',$c)!==false){$Area=$a;}else{$Area='No Match';}}
但是我发现,由于邮政编码之间没有逗号分隔,STRPO不起作用…剩下的部分(不是区域部分)总是3个字符,或者可能会有变化?我编辑了我的答案,检查它是否符合你的需要。唯一的问题是,这是我的错,没有在原始帖子中提到它,有时邮政编码的第一部分可能有4个字符,例如“BC24 4YX”,以前3个字符为例,我们会看到“BC2”总是用空格隔开吗?不总是用空格隔开,有时根本不会分开。我一直在玩你所做的事情,想知道这样的东西是否可行:
foreach($a=>b){foreach($b as$c){if(strpos($row['postcode',$c)!==false){$Area=$a;}else{$Area='No Match';}}
但是我发现,由于邮政编码之间没有逗号分隔,strpos不起作用…剩下的部分(不是区域部分)总是3个字符,或者这也可能会有变化?我编辑了我的答案,如果它符合您的需要,请查看它。