我有一个这样的数组:
$_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()
有关,但我不确定确切的语法。
非常感谢您的帮助。
答案 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;
}
希望有所帮助!