0

我想在一个数组中搜索是否有一个字符串长度正好为 5 个字符的键,并且它必须是整数类型。

我试过了:

$key = array_search( strlen( is_int($array)=== true) === 5 , $array); 

但这不起作用。所以我想知道它是否存在以及它是哪个键。

非常感谢。

4

4 回答 4

2

怎么样:

$filtered = array_filter($array, function($v){
  return !!(is_int($v)&&strlen($v)==5);
});

运行代码

本质上array_filter迭代数组的每个元素,将每个值传递$v给可调用函数。根据您所需的条件,它返回一个布尔值(真或假),以确定它是否保留在结果$filtered数组中。

!!不是绝对必要的,因为(...)它将确保正确转换布尔值,但感叹号只是语法糖-个人对可读性的偏好。

于 2013-04-15T10:22:00.270 回答
1

这不是 array_search() 的工作方式。它在值中搜索匹配的字符串,并返回一个键。如果你想搜索一个键,最好的办法是简单地迭代它。

foreach ($array as $key => $value) {
    if (strlen($key) === 5) { 
        echo $key . ": " . $value; 
        break; //Finish the loop once a match is found
    }
}
于 2013-04-15T10:22:40.770 回答
1

array_search 不会像这样尝试

foreach ($array as $key => $value) {

if ((strlen($value) == 5) && is_int($value)) 
 { 
    echo $key . ": " . $value;  
 }
}

您可以使用array_walk

array_walk($array, function(&$value, $index){
if (strlen($value) == 5 && (is_int($index))) echo "$index:$value";
});

数组遍历遍历每个元素并应用用户定义的函数

于 2013-04-15T10:25:08.897 回答
1

这是将值与整数和精确 5 字符进行比较的示例示例

$array = array(12345,'asatae');

$key_val = array();
foreach($array as $each_val){    
    if(is_int($each_val) && strlen($each_val) == 5){        
        $key_val[] = $each_val;
    }
}

echo "<pre>";
print_r($key_val);

你的输出会像

Array
(
    [0] => 12345
)

注意:在数组中必须是整数值而不是引号

像数组(23,“23”,23.5,“23.5”)

23 是第一个键的整数..

于 2013-04-15T10:30:20.017 回答