我有一个这种格式的数组:
countries(
[0] = Array
(
[0] = 1
[1] = USA
)
[1] = Array
(
[0] = 93
[1] = Afghanistan
)
[2] = Array
(
[0] = 358
[1] = Finland
)
)
=======
[0] country code
[1] country name
我希望搜索此数组以获取该数字所属的国家/地区。
示例: 358545454554,我如何搜索阵列以获得哪个国家/地区,在这种情况下=芬兰 请考虑性能,所以我想要最快的方式
答案 0 :(得分:3)
要匹配第一个数字,请将这些数字的substring与结果进行比较:(demo)
<?php
$search = '358545454554';
$countries = [[1, 'USA'], [93, 'Afghanistan'], [358, 'Finland']];
$country = null;
foreach ($countries as $c) {
if (substr($search, 0, strlen($c[0])) == $c[0]) {
$country = $c[1];
break;
}
}
echo ($country === null) ? 'No country found!' : $country;
答案 1 :(得分:0)
if (strpos($string, $word) === FALSE) {
... not found ...
}
请注意strpos
区分大小写,如果您想要不区分大小写的搜索,请改用stripos()
。
还要注意===
,强制进行严格的相等测试。 strpos
如果'needle'字符串位于'haystack'的开头,则返回有效0。通过强制检查实际的布尔值false(也就是0),可以消除错误的positiv
答案 2 :(得分:0)
$countries = array(
array('1','USA'),
array('93','Afghanistan'),
array('358','Finland'),
array('3','India')
);
$input_code = '358545454554';
$searched = array();
foreach($countries as $country) {
if (strpos($input_code, $country[0]) !== FALSE)
$searched[] = $country[1];
}
print_r($searched);
请访问此处(demo)。
答案 3 :(得分:0)
你可以使用array_filter。第一个变体在国家ID中的任意位置搜索数字,因此3581545454554与美国和芬兰相匹配,第二个变体使用正则表达式仅过滤以相同数字开头的ID。
$data = array(
array(1, 'USA'),
array(93, 'Afghanistan'),
array(358,'Finland')
);
$term = '358545454554';
// in case you want to match it anywhere in the term string...
$result = array_filter($data, function($elem) use($term) {
return (strpos((string) $term,(string) $elem[0]) !==false ) ? true : false;
});
var_dump($result);
// in case you want to match only from start
$result = array_filter($data, function($elem) use($term) {
return preg_match('/^'.$elem[0].'/',$term);
});
var_dump($result);