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案例。或者我需要进行另一次迭代以返回上一个字母大小写,这很复杂。。。