2015-04-06 54 views
1

我必须包含以下格式子阵列多维数组:搜索多维数组的值,如果值不存在,删除阵列

[0] Array => 
    (
     [first] => Foo 
     [second] => Bar 
    ) 
[1] Array => 
    (
     [first] => Foo 
     [second] => Bar 
    ) 
[2] Array => 
    (
     [first] => Foo 
     [second] => bingo 
    ) 
[3] Array => 
    (
     [first] => jackpot 
     [second] => bar 
    ) 

我想搜索“宾果”整个数组和'jackpot',并删除不包含这些值的任何子数组(在上例中,应该删除数组0和数组1)。

我明白如何使用array_search('bingo',$ myarray)搜索数组,但不知道如何去除其他两个。有没有简单的方法来实现这一点?

+0

1.在你的标题,如果不存在*你*,所以我是一个有点困惑2. *并删除前两个元素(0,1)*你的意思是前2个数组还是什么? – Rizier123 2015-04-06 14:04:21

+0

对不起,我修改了标题....在这个例子中,我想删除数组0和数组1,因为这两个不包含'宾果'或'中奖'。 – user2726041 2015-04-06 14:07:08

+0

啊,所以你的*模式*要么是“大奖”或“宾果”必须在阵列中,否则你想删除它? (顺便说一句:在你的问题中添加你的尝试!无论它是否工作或只是添加你尝试的东西,像array_search或其他) – Rizier123 2015-04-06 14:08:24

回答

3

这应该为你工作:

(在这里我只是过滤所有阵列出与array_filter()这也有两种jackpot或它bingo,元素所以只有阵列不具有任何jackpotbingo在它仍将在此之后我得到array_keys()和循环这些阵列的所有键通过他们并取消他们的阵列)

<?php 

    $keys = array_keys(array_filter($arr, function($v, $k){ 
     if(in_array("jackpot", $v) || in_array("bingo", $v)) 
      return FALSE; 
     return TRUE; 
    }, ARRAY_FILTER_USE_BOTH)); 

    foreach($keys as $key) 
     unset($arr[$key]); 

    print_r($arr); 

?> 

输出:

Array 
(
    [2] => Array 
     (
      [first] => Foo 
      [second] => bingo 
     ) 

    [3] => Array 
     (
      [first] => jackpot 
      [second] => bar 
     ) 

) 

编辑:

即使是一个简单的解决方案将只是这样做:

foreach($arr as $k => $v) { 
    if(!in_array("jackpot", $v) && !in_array("bingo", $v)) 
     unset($arr[$k]); 
} 
+0

非常感谢,但我似乎从ARRAY_FILTER_USE_BOTH得到一个错误:“注意:使用未定义的常量ARRAY_FILTER_USE_BOTH - 假定'ARRAY_FILTER_USE_BOTH'” – user2726041 2015-04-06 14:29:09

+0

@ user2726041'echo phpversion();'= ...? <5.6? – Rizier123 2015-04-06 14:30:26

+0

啊!我正在使用5.4.10 – user2726041 2015-04-06 14:33:17