-1

我有一个这种格式的数组:

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,我如何搜索数组以获取哪个国家,在这种情况下=芬兰请考虑性能,所以我想要最快的方法

4

4 回答 4

3

要匹配第一个数字,请将这些数字的子字符串与您的结果进行比较:(演示

<?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;
于 2013-02-12T10:17:56.317 回答
0
if (strpos($string, $word) === FALSE) {
   ... not found ...
}

请注意,这strpos是区分大小写的,如果您想要不区分大小写的搜索,请stripos()改用。

还要注意===, 强制进行严格的相等测试。strpos如果“needle”字符串位于“haystack”的开头,则可以返回有效的 0。通过强制检查一个实际的布尔假(又名 0),你消除了那个假阳性

于 2013-02-12T10:09:32.850 回答
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);

请访问此处(演示)。

于 2013-02-12T10:15:04.297 回答
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);
于 2013-02-12T10:52:14.070 回答