Php 检查数组是否包含特定值?

Php 检查数组是否包含特定值?,php,arrays,foreach,Php,Arrays,Foreach,我想检查数组上是否有如下值: function check_value_new ($list, $message) { foreach ($list as $current) { if ($current == $message) return true; } return false; } function check_value_old ($list, $message) { for ($i = 0; $i < count ($stat

我想检查数组上是否有如下值:

function check_value_new ($list, $message) {
    foreach ($list as $current) {
        if ($current == $message) return true;
    }
    return false;
}

function check_value_old ($list, $message) {
    for ($i = 0; $i < count ($status_list); $i ++) {
        if ($status_list[$i] == $$message) return true;
    }
    return false;
}

$arr = array ("hello", "good bye", "ciao", "buenas dias", "bon jour");
check_value_old ($arr, "buenas dias"); // works but it isn't the best
check_value_new ($arr, "buenas dias"); // argument error, where I'm wrong?
功能检查\u值\u新建($list,$message){
foreach($list as$current){
如果($current==$message)返回true;
}
返回false;
}
函数检查\u值\u旧($list,$message){
对于($i=0;$i

我读过
check\u value\u new
方法是处理数组的更好方法,但我不习惯使用它,我应该如何修复它?

PHP提供了一个名为的函数,用于检查给定数组中是否存在值

您可以更改
check\u value\u new
功能以包括以下内容:

function check_value_new ($list, $message) {
   foreach ($list as $current) {
     if (in_array($message, $current)) {
            return true;
  }
   return false;
}
如果愿意,也可以使函数在没有
foreach
循环的情况下工作,如下所示

function check_value_new ($list, $message) {
  // returns true if found, else returns false.
     return in_array($message, $list); 
 }

PHP提供了一个名为的函数,用于检查给定数组中是否存在值

您可以更改
check\u value\u new
功能以包括以下内容:

function check_value_new ($list, $message) {
   foreach ($list as $current) {
     if (in_array($message, $current)) {
            return true;
  }
   return false;
}
如果愿意,也可以使函数在没有
foreach
循环的情况下工作,如下所示

function check_value_new ($list, $message) {
  // returns true if found, else returns false.
     return in_array($message, $list); 
 }

check\u value\u old()
函数中断的原因是循环的第二个参数中有一个输入错误
$status_list
不是传递到函数中的变量之一,在使用前不会在任何地方声明它。您只需使用
$list
。也没有必要在每次迭代时调用
count()
,因为该值在循环中从不更改,所以只需在循环之前调用一次,并在第二个参数中使用该值

至于决定如何循环数组值,没有理由重新设计本机函数调用
in_array()
已经设计并优化为搜索数组中的线性值,并在找到匹配项后立即返回
true
;否则它将返回
false

我不知道@AnthonyForloney在一个
foreach()
循环中写入
,这是在做什么。由于没有足够的大括号,代码段不仅会中断,而且输入数组没有两级数据,因此
in_array()
在接收到
$current
这是一个字符串(不是预期的数组)时会阻塞

最后,我的建议是:只有在没有适合您需要的本机函数时,才编写您自己的自定义函数。扔掉这两个手动循环的想法,只调用:

$arr = ["hello", "good bye", "ciao", "buenas dias", "bon jour"];
var_export(in_array("buenas dias", $arr));

我想提供的最后一个见解是关于微优化。如果您计划检查“非常大”数组中是否存在唯一值,或者如果您要在同一数组上进行数千次搜索,则以“翻转”方向设置数组并调用
isset()
array\u key\u exists()
会更有效
isset()
/
array\u key\u exists()
将始终优于
in\u array()
array\u search()
,因为php将数组处理为“哈希映射”。更多阅读。

您的
check\u value\u old()
函数中断的原因是循环的第二个参数中有一个输入错误
$status_list
不是传递到函数中的变量之一,在使用前不会在任何地方声明它。您只需使用
$list
。也没有必要在每次迭代时调用
count()
,因为该值在循环中从不更改,所以只需在循环之前调用一次,并在第二个参数中使用该值

至于决定如何循环数组值,没有理由重新设计本机函数调用
in_array()
已经设计并优化为搜索数组中的线性值,并在找到匹配项后立即返回
true
;否则它将返回
false

我不知道@AnthonyForloney在一个
foreach()
循环中写入
,这是在做什么。由于没有足够的大括号,代码段不仅会中断,而且输入数组没有两级数据,因此
in_array()
在接收到
$current
这是一个字符串(不是预期的数组)时会阻塞

最后,我的建议是:只有在没有适合您需要的本机函数时,才编写您自己的自定义函数。扔掉这两个手动循环的想法,只调用:

$arr = ["hello", "good bye", "ciao", "buenas dias", "bon jour"];
var_export(in_array("buenas dias", $arr));
我想提供的最后一个见解是关于微优化。如果您计划检查“非常大”数组中是否存在唯一值,或者如果您要在同一数组上进行数千次搜索,则以“翻转”方向设置数组并调用
isset()
array\u key\u exists()
会更有效
isset()
/
array\u key\u exists()
将始终优于
in\u array()
array\u search()
,因为php将数组处理为“哈希映射”。更多的阅读