- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
PHP array_keys 如何搜索值?
例子:
$array2 = array("xyz", "xyz", "abc", "abc", "xyz", "xyz", "text", "abc", "text");
print_r(array_keys($array2,"abc"));
Since they are key,value pairs. I am guessing PHP to do a search based on hash rather than iterate through each of the key-pairs in the array.
对此有任何“清晰的想法”吗?
最佳答案
在 php 源代码中,它们逐一遍历每个键和值。 https://github.com/php/php-src/blob/master/ext/standard/array.c#L2439
/* {{{ proto array array_keys(array input [, mixed search_value[, bool strict]])
Return just the keys from the input array, optionally only for the specified search_value */
PHP_FUNCTION(array_keys)
{
zval *input, /* Input array */
*search_value = NULL, /* Value to search for */
**entry, /* An entry in the input array */
res, /* Result of comparison */
*new_val; /* New value */
int add_key; /* Flag to indicate whether a key should be added */
char *string_key; /* String key */
uint string_key_len;
ulong num_key; /* Numeric key */
zend_bool strict = 0; /* do strict comparison */
HashPosition pos;
int (*is_equal_func)(zval *, zval *, zval * TSRMLS_DC) = is_equal_function;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a|zb", &input, &search_value, &strict) == FAILURE) {
return;
}
if (strict) {
is_equal_func = is_identical_function;
}
/* Initialize return array */
if (search_value != NULL) {
array_init(return_value);
} else {
array_init_size(return_value, zend_hash_num_elements(Z_ARRVAL_P(input)));
}
add_key = 1;
/* Go through input array and add keys to the return array */
zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(input), &pos);
while (zend_hash_get_current_data_ex(Z_ARRVAL_P(input), (void **)&entry, &pos) == SUCCESS) {
if (search_value != NULL) {
is_equal_func(&res, search_value, *entry TSRMLS_CC);
add_key = zval_is_true(&res);
}
if (add_key) {
MAKE_STD_ZVAL(new_val);
switch (zend_hash_get_current_key_ex(Z_ARRVAL_P(input), &string_key, &string_key_len, &num_key, 1, &pos)) {
case HASH_KEY_IS_STRING:
ZVAL_STRINGL(new_val, string_key, string_key_len - 1, 0);
zend_hash_next_index_insert(Z_ARRVAL_P(return_value), &new_val, sizeof(zval *), NULL);
break;
case HASH_KEY_IS_LONG:
Z_TYPE_P(new_val) = IS_LONG;
Z_LVAL_P(new_val) = num_key;
zend_hash_next_index_insert(Z_ARRVAL_P(return_value), &new_val, sizeof(zval *), NULL);
break;
}
}
zend_hash_move_forward_ex(Z_ARRVAL_P(input), &pos);
}
}
/* }}} */
关于php - array_keys 如何搜索值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8659224/
PHP array_keys 如何搜索值? 例子: $array2 = array("xyz", "xyz", "abc", "abc", "xyz", "xyz", "text", "abc", "
这个问题在这里已经有了答案: Deleting an element from an array in PHP (25 个答案) 关闭 8 年前。 我有一个 PHP 例程可以处理表单并将值输出到 C
我有两个数组: $字段名: array( [0] => array( ['fieldName'] =>'id' ['fieldType'] => 'int(11)' ) [1]
array_keys返回数组中部分的或所有的键名 说明 array array_keys ( array $array [, mixed $search_value [, bool $stric
使用此解决方案将数组插入数据库 Insert array into MySQL database with PHP产生 MySql 错误。 我的代码: // Create arrays and val
也许是一个简单的问题,但我无法弄明白..我尝试将数组中的值放入变量中,但它似乎不起作用。 $array = array(0 => 100, "color" => "red"); print_r(arr
我想返回 PHP 数组中的所有键,其中相应的值包含搜索元素。 array_keys如果值与搜索词完全匹配,将起作用,但如果搜索词出现在值中的某处但不完全匹配,则不会起作用。 我怎样才能做到这一点? 最
给定一个如下所示的关联数组, $field_defaults = array( 'id' => 0, 'name' => 'new item', 'desc' => '', 'pare
由于某些奇怪的原因,下面的函数在输入 2 时返回 11,而我希望它返回 1。怎么了? 1, 21 => 1, 3 => 2, 6 => 2, 11 => 2,
我遇到了一个问题: 我有两个如下所示的数组: $array1 = array('1','2','1','3','1'); $array2 = array('1','2','3'); // Un
我想返回一个包含键的数组: Content)): $jarray= json_decode($values[0]->Content); print_r(array_keys($jarray)); ex
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: how to fetch array keys with jQuery? php 内置函数 array_ke
在获取数组的所有键时,哪个性能更好?array_keys 还是 foreach ?我想知道 array_keys 是使用 foreach 循环还是 for 循环来获取键的函数..(因为 foreach
这个问题在这里已经有了答案: Is the order of keys returned from array_keys the same as the order in the input arr
我的代码可以追溯到 2011 年,而且我在代码布局方式的严格标准方面遇到了很多错误。 if (!isset($End)) { $Info['Ca
有没有办法做这样的事情: $test_array = array( "first_key" => "first_value", "second_key" => "second_valu
目前我的“方法”检查 array_key 是否在数组中,我需要补充一点,如果 key 长度为 13 就可以了,但是当它更长时,它必须删除类似的前 5 个数字列表。我的代码根据我的 key 从数据库中搜
PHP 文档指出 default value of array_keys second argument是NULL。 但是,当显式传递 NULL 时,array_keys 似乎无法正常工作。 示例:
假设我想遍历一个数组,或者我从不查看值,或者我在其中设置东西,所以我只想要键。哪个更快: // Set a variable each iteration which is unused. forea
我能够使用 array_keys 和 array_values 为 MySQL 执行 INSERT: $columns = implode(", ", array_keys($cmd_array));
我是一名优秀的程序员,十分优秀!