PHP数组:如何通过传递多个值来查找数组中的所有键?
通过将另一个数组作为值传递,是否有一种简单而优雅的方法来获取输入数组的所有键PHP数组:如何通过传递多个值来查找数组中的所有键?,php,arrays,Php,Arrays,通过将另一个数组作为值传递,是否有一种简单而优雅的方法来获取输入数组的所有键 $haystack = array ( 11 => 'Parenting', 48 => 'How', 50 => 'Parenting', 54 => 'parenting', 57 => 'parenting', 58 => 'style', 59 => 'that', 60 => 'offer', 61 => 'kids',
$haystack = array (
11 => 'Parenting',
48 => 'How',
50 => 'Parenting',
54 => 'parenting',
57 => 'parenting',
58 => 'style',
59 => 'that',
60 => 'offer',
61 => 'kids',
62 => 'greater',
63 => 'freedom',
);
$needle = ['Parenting', 'offer', 'freedom'];
期望输出:
$output = array (
11 => 'Parenting',
50 => 'Parenting',
54 => 'parenting',
57 => 'parenting',
60 => 'offer',
63 => 'freedom'
);
我尝试了PHP.net中描述的方法,但它返回一个空数组
$output= array_keys($haystack, $needle);
您可以筛选阵列:
您可以筛选阵列:
我相信这就是你需要的
array_intersect返回一个数组,该数组包含所有参数中存在的array1的所有值。请注意,关键点是保留的
请注意,比较是区分大小写的
var_dump(preg_grep("/" . implode("|", $needle) . "/i", $haystack));
因此可以将数组转换为小写,然后对其执行
我相信这就是你需要的
array_intersect返回一个数组,该数组包含所有参数中存在的array1的所有值。请注意,关键点是保留的
请注意,比较是区分大小写的
var_dump(preg_grep("/" . implode("|", $needle) . "/i", $haystack));
因此可以将数组转换为小写,然后对其执行
我会使用一个大家都能理解的简单函数。对我来说,这很简单,也很优雅
function getFragArray($arrayValues, $arrayKey) {
$resu = [];
foreach ($arrayValues as $key=>$value) {
if(in_array($value,$arrayKey)) {
$resu[$key] = $value;
}
}
return $resu;
}
我会使用一个大家都能理解的简单函数。对我来说,这很简单,也很优雅
function getFragArray($arrayValues, $arrayKey) {
$resu = [];
foreach ($arrayValues as $key=>$value) {
if(in_array($value,$arrayKey)) {
$resu[$key] = $value;
}
}
return $resu;
}
如果你有区分大小写的问题,那么你可以使用preg_grep和infrade 我将指针内爆,并使用或将它们分开,并使用regex选项区分大小写
var_dump(preg_grep("/" . implode("|", $needle) . "/i", $haystack));
如果指针中有正则表达式字符,则必须使用preg|quote,但由于|是正则表达式字符,preg|quote将撤消它,因此我必须使用str|u replace修复该问题
var_dump(preg_grep("/" . str_replace("\|", "|", preg_quote(implode("|", $needle))) . "/i", $haystack));
如果你有区分大小写的问题,那么你可以使用preg_grep和infrade 我将指针内爆,并使用或将它们分开,并使用regex选项区分大小写
var_dump(preg_grep("/" . implode("|", $needle) . "/i", $haystack));
如果指针中有正则表达式字符,则必须使用preg|quote,但由于|是正则表达式字符,preg|quote将撤消它,因此我必须使用str|u replace修复该问题
var_dump(preg_grep("/" . str_replace("\|", "|", preg_quote(implode("|", $needle))) . "/i", $haystack));
数组过滤器和数组过滤器都用于什么?数组过滤器和数组过滤器都用于什么?请注意,您在desire输出中有父项,也提供了子项,但$Needle中没有。我使用了类似的文本来解决您的字符串不完全相同的问题-检查我的帖子,您在desire输出中有父项,也提供了子项,但$Needle中没有你发行的不相同字符串-查看我的postNice!问题是,我没有提到,我不能改变$haystack arr案例。或者我需要进行另一次迭代以返回上一个字母大小写,这很复杂…很好!问题是,我没有提到,我不能改变$haystack arr案例。或者我需要进行另一次迭代以返回上一个字母大小写,这很复杂。。。