1

in_array我知道 PHP 4 和 PHP 5 支持用于确定元素是否在数组中的内置函数。

但是,出于某种原因,我正在使用 PHP 的早期版本,并想知道它的替代方案是什么。

4

5 回答 5

4

使用自定义函数。为了将来的兼容性,您可以使用function_exists来检查您正在使用的当前版本的 PHP 是否确实具有in_array.

function inArray($needle, $haystack)
{
    if (function_exists('in_array')) {
        return in_array($needle, $haystack);
    } else {
        foreach ($haystack as $e) {
            if ($e === $needle) {
                return true;
            }
        }

        return false;
    }
}
于 2013-08-07T18:35:22.843 回答
2

如果您使用的是 PHP 4 之前的版本,foreach也将不可用,因此您需要坚持使用listand each。同样为了向前兼容,使用第三个参数进行严格比较:

if (!function_exists('in_array')) {
   function in_array($needle, $haystack, $strict = false) {
       while (list($key, $item) = each($haystack)) {
           if ($strict && $needle === $item) {
               return true;
           } else if (!$strict && $needle == $item) {
               return true;
           }
       }
       return false;
   }
}
于 2013-08-07T19:05:31.633 回答
0

如果不检查哪些版本提供了哪些功能,并与您正在使用的版本进行比较(我们不是 php.net 百科全书),最好的选择是回到基础,然后循环并检查。

function in_array($val, $array) {

   foreach($array as $a) {

      if($a === $val)
          return true;

   }

   return false;

}
于 2013-08-07T18:33:39.193 回答
0

您可以创建自己的功能来模仿功能

function my_in_array($ar, $val)
{
  foreach($ar as $k => $v)
  {
    if($v == $val) return true;
  }
  return false;
}

或者如果您正在寻找钥匙

function my_in_array($ar, $val)
{
  foreach($ar as $k => $v)
  {
    if($k == $val) return true;
  }
  return false;
}
于 2013-08-07T18:33:47.243 回答
0

创建自己的数组函数,如下所示:

function my_in_array($value, $arr) {
    foreach ($arr as $a) {
        if ($a == $value) {
            return true;
        }
    }
    return false;
}
于 2013-08-07T18:36:53.490 回答