检查多维数组中的条件

时间:2011-01-24 15:41:06

标签: php arrays multidimensional-array

我有一个这样的数组:

$_SESSION['food'] = array( 
   array(
      "name" => "apple",
      "shape" => "round",
      "color" => "red"
  ),
   array(
      "name" => "banana",
      "shape" => "long",
      "color" => "yellow"
  )
);

我想做一个声明,检查上面任何第二级数组中是否存在任何特定的值组合。

所以,基本上:

if NAME=APPLE and COLOR=RED in FOOD // returns true
if NAME=BANANA and COLOR=GREEN in FOOD // returns false
if NAME=APPLE and SHAPE=LONG in FOOD // returns false

我将如何构造上面的if()语句(仅仅一个语句就足够了)?我真的很难过。

我怀疑它与在in_array()内运行foreach()有关,但我不确定确切的语法。

非常感谢您的帮助。

3 个答案:

答案 0 :(得分:4)

类似的东西:

foreach($_SESSION['food'] as $fruit) {
        if($fruit['name'] == 'apple' && $fruit['color'] == 'red') {
                return true;
        }
}

答案 1 :(得分:1)

您必须遍历所有数组,并且可以使用array_intersect_assoc进行比较:

function contains($haystack, $needle) {
    $needle_length = count($needle);
    foreach($haystack as $sub) {
        if(is_array($sub) 
            && count(array_intersect_assoc($needle, $sub)) === $needle_length) {
            return true;
        }
    }
    return false;
}

并将其命名为:

$red_apple = array('name'=>'apple','color'=>'red');

if(contains($_SESSION['food'], $red_apple)) {
    // something
}

通过这种方式,您可以轻松检查包含数组的任何数组的值的任意组合。

答案 2 :(得分:0)

function existsInArray($name, $color){
    foreach($_SESSION['food'] as $foodItem){
         if($foodItem['name'] ==$name && $foodItem['color'] == $color){
              return true;
         }
    }
    return false;
}
希望有所帮助!