我想在一个数组中搜索是否有一个字符串长度正好为 5 个字符的键,并且它必须是整数类型。
我试过了:
$key = array_search( strlen( is_int($array)=== true) === 5 , $array);
但这不起作用。所以我想知道它是否存在以及它是哪个键。
非常感谢。
怎么样:
$filtered = array_filter($array, function($v){
return !!(is_int($v)&&strlen($v)==5);
});
本质上array_filter
迭代数组的每个元素,将每个值传递$v
给可调用函数。根据您所需的条件,它返回一个布尔值(真或假),以确定它是否保留在结果$filtered
数组中。
这!!
不是绝对必要的,因为(...)
它将确保正确转换布尔值,但感叹号只是语法糖-个人对可读性的偏好。
这不是 array_search() 的工作方式。它在值中搜索匹配的字符串,并返回一个键。如果你想搜索一个键,最好的办法是简单地迭代它。
foreach ($array as $key => $value) {
if (strlen($key) === 5) {
echo $key . ": " . $value;
break; //Finish the loop once a match is found
}
}
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";
});
数组遍历遍历每个元素并应用用户定义的函数
这是将值与整数和精确 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 是第一个键的整数..