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将数组处理为“哈希映射”。更多的阅读