PHP 错误 in_array() [function.in-array] : Wrong datatype for second argument

标签 php

即使我在函数中为第二个参数设置了全局变量,我也会收到以下错误。第二个参数是一个数组。

in_array() [function.in-array]: Wrong datatype for second argument

$cat_id

Array ( [0] => 76 [1] => 89 [2] => 81 ) 

PHP

for ($x = 0; $x < count($query_cat_id); $x++){
    if(in_array($query_cat_id[$x], $cat_id)){
    //
    }
}

最佳答案

将代码更改为以下内容:

$cat_id = array( 0 => 76 , 1 => 89 , 2 => 81 ); 

for( $x = 0 , $c = count( $query_cat_id ) ; $x < $c ; $x++ ){
  if( in_array( $query_cat_id[$x] , (array) $cat_id ) ){
    // MATCH FOUND
  }
}

1)如果您的问题中提供的代码按原样,则您声明数组的方式不寻常(并且可能有错误), 2) 在 $cat_id 之前包含 (array) 应确保将其作为数组处理,即使它实际上是一个字符串(它会立即转换为数组该函数的目的)。

我意识到这些建议可能不准确,因为它们基于您复制并粘贴到 SO 中的数据,而不是脚本中的实际数据,但它们可能为您提供一个起点。

可能的替代解决方案

如果代码的目的是比较两个数组,并在发现值在两个数组中时执行某些操作,则以下可能是执行此工作的更快方法:

$cat_id = array( 0 => 76 , 1 => 89 , 2 => 81 ); 
//$query_cat_id is assumed as set to an array already

$matched_cat_ids = array_intersect( (array) $query_cat_id , (array) $cat_id );

foreach( $matched_cat_ids as $k => $v ){
  // Perform work required on MATCH for Value "$v"
}

假设您需要为每场比赛执行特定的工作。如果您只是想知道是否发生了匹配,检查 count($matched_cat_ids) 是否大于零就足够了。

关于PHP 错误 in_array() [function.in-array] : Wrong datatype for second argument,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3544250/

相关文章:

php - 如何在php中查询mongo?

php - Laravel 5.1 - 将成功 session 传递给助手

php - 使用 setData 将数据从布局传递到 block Controller

php - 如何在 MySQL 中选择 TOP n 分组值的 AVG?

javascript - 如何使用 AJAX 将 HTML 变量上传到 PHP 文件

php - 为什么我在 chrome 上得到 "ERR_RESPONSE_HEADERS_TOO_BIG"?

php - 如何 $_GET 多个复选框值?

php - 根据另一个列值获取列值

php - 需要帮助来开发具有 2 种语言的网站英语和法语

php - iframe 中的 laravel 应用程序不断刷新 session