php函数in_array跟go语言中的自定义函数in_array的对比及使用

2023-06-01 00:00:00 php 函数

go语言中自定义函数in_array:

顾名思义go语言中没有这个函数是我自己写的,因为我项目中要用到所以写了一个记录一下


in_array代码:

// 判断是否在数组
func in_Array(n int, f func(int) bool) bool {
   for i := 0; i < n; i++ {
       if f(i) {
           return true
       }
   }
   return false
}


使用

//定义数组 
urls := [2]string{
   "aaa",
   "bbb",
}
//判断是否在数组
exists := in_Array(len(urls), func(i int) bool {
   return urls[i] == url
})

php语言中的函数in_array:

in_array属于php自带函数官方的


定义和用法

in_array() 函数在数组中搜索给定的值。

语法

in_array(value,array,type)

参数 描述

value 必需。规定要在数组搜索的值。

array 必需。规定要搜索的数组。

type 可选。如果设置该参数为 true,则检查搜索的数据与数组的值的类型是否相同。

ps:

如果给定的值 value 存在于数组 array 中则返回 true。如果第三个参数设置为 true,函数只有在元素存在于数组中且数据类型与给定值相同时才返回 true。

如果没有在数组中找到参数,函数返回 false。

注释:如果 value 参数是字符串,且 type 参数设置为 true,则搜索区分大小写。


php源码

在ext/standard/array.c 文件中

/* {{{ proto bool in_array(mixed needle, array haystack [, bool strict])
 Checks if the given value exists in the array */  
PHP_FUNCTION(in_array)          
{                
 php_search_array(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); 
}  

在ext/standard/array.c 文件中 查看php_search_array原型

/* void php_search_array(INTERNAL_FUNCTION_PARAMETERS, int behavior)
 * 0 = return boolean
 * 1 = return key
 */  
static void php_search_array(INTERNAL_FUNCTION_PARAMETERS, int behavior) /* {{{ */
{  
 zval *value,   /* value to check for */
   *array,   /* array to check in */
   **entry,   /* pointer to array entry */
   res;    /* comparison result */
 HashPosition pos;  /* hash iterator */
 zend_bool strict = 0;  /* strict comparison or not */
 ulong num_key;
 uint str_key_len;
 char *string_key;
 int (*is_equal_func)(zval *, zval *, zval * TSRMLS_DC) = is_equal_function;
 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "za|b", &value, &array, &strict) == FAILURE) {
  return;
 } 
 if (strict) {
  is_equal_func = is_identical_function;
 } 
 zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(array), &pos);
 while (zend_hash_get_current_data_ex(Z_ARRVAL_P(array), (void **)&entry, &pos) == SUCCESS) {
  is_equal_func(&res, value, *entry TSRMLS_CC);
  if (Z_LVAL(res)) {
   if (behavior == 0) {
    RETURN_TRUE;
   } else {
    /* Return current key */
    switch (zend_hash_get_current_key_ex(Z_ARRVAL_P(array), &string_key, &str_key_len, &num_key, 0, &pos)) {
     case HASH_KEY_IS_STRING:
      RETURN_STRINGL(string_key, str_key_len - 1, 1);
      break;
     case HASH_KEY_IS_LONG:
      RETURN_LONG(num_key);
      break;
    }
   }
  }
  zend_hash_move_forward_ex(Z_ARRVAL_P(array), &pos);
 } 
 RETURN_FALSE;
}  
/* }}} */
/* {{{ proto bool in_array(mixed needle, array haystack [, bool strict])
 Checks if the given value exists in the array */

想要了解更多in_array函数信息请自行谷歌搜索

相关文章