PHP数组搜索 - key =>串

时间:2011-10-07 16:45:26

标签: php arrays

in_array()

我遇到了一些麻烦
$list = array(
    "files/" => "/system/application/files/_index.php",
    "misc/chat/" => "/system/application/misc/chat/_index.php"
);

我有$_GET['f'],其中包含字符串files/ 如何在数组中搜索可能的匹配?

如果在数组中找到该字符串,则应包含该文件

感谢您的帮助:)

5 个答案:

答案 0 :(得分:6)

这很简单。您需要做的就是检查数组元素是否已设置。通常使用的语言结构是isset()(是的,很明显)......

if (isset($list[$_GET['f']])) {
}

没有必要为此调用函数,isset更清晰,更容易阅读(恕我直言)......

请注意,isset实际上不是一个函数。这是一种语言结构。这有一些影响:

  1. 您无法在函数返回时使用issetisset(foo())将无效)。它只适用于变量(或变量组合,如数组访问或对象访问)。

  2. 它没有函数调用的开销,所以它总是很快。函数调用的总体开销是需要担心的微优化,但值得一提的是,如果你处于紧密循环中,它可以加起来。

  3. 您不能将isset称为变量函数。这不起作用:

    $func = 'isset';
    $func($var);
    

答案 1 :(得分:4)

array_key_exists是一个函数,它返回true,提供的键位于数组中。

if(array_key_exists( $_GET['f'], $list )) {
    echo $list[$_GET['f']];
}

答案 2 :(得分:2)

您可以将in_array()array_keys()结合使用:

if (in_array($_GET['f'], array_keys($list))) {
  // it's in the array
}

array_keys()从其输入数组返回一个键数组。使用$list作为输入,它将产生:

array("files/", "misc/chat/");

然后,您使用in_array()搜索array_keys()的输出。

答案 3 :(得分:1)

使用array_key_exists

if(array_key_exists($_GET['f'], $list)){
  // Do something with $list[$_GET['f']];
}

答案 4 :(得分:0)

in_array()使用松散比较搜索数组中的键,除非设置了strict。 就像下面一样。

foreach ($array as $value){
    if ($key == $value){
        return true;
    }
}

我的方式。

function include_in_array($key, $array)
{
    foreach($array as $value){
        if ( strpos($value, $key) !== false ){
            return false;
        }
    }
}