Php 检查邮政编码是否在多个数组中?
我有3个不同的区域,我的区域1,我的区域2,我的区域3。其中每个都有一组邮政编码: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
$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个字符,或者这也可能会有变化?我编辑了我的答案,如果它符合您的需要,请查看它。