2015-04-06 37 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