在多维数组中搜索哪些键包含特定值并删除不包含特定键的键

时间:2019-06-28 10:30:07

标签: php arrays multidimensional-array foreach

我有一个包含关键字(电子邮件,购物车等)的多维数组,每个关键字都有应用程序的特定列表(EmailAppA ..)及其排名(1,2 ...)。

Array
(
    [email] => Array
        (
            [EmailAppA] => 1
            [EmailAppB] => 2
            [EmailAppC] => 4
        )

    [cart] => Array
        (
            [CartAppA] => 1
            [CartAppB] => 2
            [MyApp] => 4
        )
    [reviews] => Array
        (
            [reviewAppA] => 1
            [reviewAppB] => 4
            [reviewAppC] => 5
            [MyApp] => 7

        )

我要实现的是在数组中循环,找到包含应用程序“ MyApp”的所有键,最后删除不包含值“ MyApp”的键。 该数组必须仅包含购物车和评论及其值,电子邮件已删除。

到目前为止,我的代码仍然被卡住:

foreach ($mappedStuff as $keywords=>$value){
    foreach ($value as $apps=>$rank){
        if($apps != 'MyApp'){
          unset($mappedStuff[$keywords];
        }
    }
}

5 个答案:

答案 0 :(得分:1)

您可以使用Click here过滤数组。在其回调函数中,您将寻找“ MyApp”的存在。如果不存在,则回调函数将返回false,因此当前键将被过滤掉。

$filtered = array_filter($array, function($apps)
{
   return in_array('MyApp', $apps);
});

我刚刚注意到,您想搜索键存在,而不是值,所以只需将代码更改为:

$filtered = array_filter($array, function($apps)
{
   return isset($apps['MyApp']);
});

答案 1 :(得分:1)

您必须修改foreach()

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

    if(!in_array('MyApp', array_keys($value))){

      unset($mappedStuff[$key]);

   }

}

输出:-https://3v4l.org/Z64Um

答案 2 :(得分:1)

您可以使用array_walk

array_walk($a, function($v, $k) use (&$a){
  if(!array_key_exists('MyApp', $v)) unset($a[$k]);
});

https://3v4l.org/gtEIt

答案 3 :(得分:0)

使用 unset($ mappedStuff [$ key] [$ apps])删除值,


foreach ($mappedStuff as $key => $value) {
    foreach ($value as $apps => $rank) {
        if($apps == 'MyApp') {
            unset($mappedStuff[$key][$apps]);
        }
    }
}

答案 4 :(得分:0)

您可以做的一件简单的事情是在for内使用foreach循环以获取内部值并使用unset函数。例如:

//This is your array
foreach($yourArray as $item)
{
    //These are your categories
    for( $i = 0; $i < count($item); $i++ )
    {
        //for every value of your category's keys, check if they don't match 'MyApp'
        if($item[$i] !== "MyApp")
        {
            //If above statement is true, unset them
            unset($item[$i]);
        }
    }
}

尝试一下,告诉我们:)