2012-09-15 57 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']);