2012-09-15 93 views
1

鍵值對我有如下數組:檢查多維數組

Array 
(
    [0] => Array 
     (
      [type] => foo 
     ) 

    [1] => Array 
     (
      [type] => bar 
     ) 

    [2] => Array 
     (
      [type] => bar 
     ) 
) 

和需要知道,如果存在一個或多個type哪個值bar,沒有做到這一點:

foreach ($arrayOfTypes as $type) { 
    if ($type['type'] == 'bar') 
    { 
     // Stuff here 
    } 
} 

(僅用於學習目的)

回答

2

我會用array_filter();

$filteredArray = array_filter($stuff, function($item){ 

    return $item['type'] == 'bar'; 

}); 

if(count($filteredArray) > 0){ 

    echo 'There was a bar item in array.'; 

}else{ 

    echo 'No luck sorry!'; 

} 
1

使用in_array:http://se.php.net/manual/en/function.in-array.php

將其與array_map結合使用,可以使您擁有的東西變平。像這樣:

$new_array = array_map(function($arr) { 
    return $arr['type']; 
}, $array); 
in_array('bar', $new_array); 
1

老實說一個foreach環或moonwave99的array-filter答案可能會是你最好的選擇,但如果你正在尋找的是最短的代碼可能和創造力,這將使大多數程序員插科打諢,你可以嘗試serialize - 荷蘭國際集團的陣列和使用字符串搜索功能:

serialize(array(
     0=>array(
      'type' => 'foo' 
     ), 
     1=>array(
      'type' => 'bar' 
     ), 
     2=>array(
      'type' => 'bar' 
     ) 
    )) 

變得

a:3:{i:0;a:1:{s:4:"type";s:3:"foo";}i:1;a:1:{s:4:"type";s:3:"bar";}i:2;a:1:{s:4:"type";s:3:"bar";}} 

所以您現在可以運行strpos()preg_match()函數來查找它們。所以你的整個功能看起來像

$exists = strpos('{s:4:"type";s:3:"bar";}',serialize($arrayOfTypes)); //returns number or false 

它的短,這是活潑的,並得到是爲簡單的字符串密鑰對完成工作。

0

這與moonwave99的解決方案基本相同,但稍有用處,因爲它可以提供一個鍵/值對,因此它可以用於搜索任何鍵/值組合:

function isKVInArray($k, $v, $array) { 
    $filtered = array_filter($array, function($item) use($k,$v) { 
     return $item[$k] == $v; 
    }); 
    if(count($filtered)>=1) return true; 
    else return false; 
} 

$k = 'live'; 
$v = 'y'; 
$my_array = array(
    0=>array(
     'live'=>'n', 
     'something_else'=>'a' 
    ), 
    1=>array(
     'live'=>'y', 
     'something_else'=>'b' 
    ), 
    2=>array(
     'live'=>'n', 
     'something_else'=>'c' 
    ) 
); 


if(isKVInArray($k, $v, $my_array)) echo "$k=>$v was found in the array."; 
else echo 'No luck sorry!'; 
0

有另一種簡單的方法,當你需要計算所有不同的價值取向

foreach ($arrayOfTypes as $type) $cnt[$type['type']]++; 

得到「酒吧」的數量,這是有用(或者獲得其他值的計數):

echo($cnt['bar']);