在多维数组中搜索并返回不带支持变量的结果

时间:2018-12-19 09:57:02

标签: php arrays loops multidimensional-array

我有2个数组:

$fruits = array(
    'Apple' => array('id' => 1),
    'Banana' => array('id' => 2),
    'Peach' => array('id' => 3)
);
$carts = array(
    'Olivia' => array(51, 3, 2),
    'Harry' => array(312, 314, 10),
    'Charlie' => array(1, 314, 626)
);

如果购物车中有一些水果ID,我想写点东西。我有此代码,并且可以正常工作。

foreach ($carts as $cart) {
    $boughtFruit = false;
    foreach ($fruits as $fruit) {
        if (in_array($fruit['id'], $cart)) {
            echo "Fruit <br>";
            $boughtFruit = true;
            break;
        }
    }
    if(!$boughtFruit){
        echo "No Fruit <br>";
    } 
}

返回:

Fruit
No fruit
Fruit

我不喜欢我的解决方案,因为我需要使用支持变量$boughtFruit和2 foreach。

您能使用PHP函数(如果存在)并且不使用$boughtFruit来建议我相同的代码吗?

1 个答案:

答案 0 :(得分:2)

您不需要进行内循环,而是使用array_intersect()在数组中查找相同的值。

$fru = array_column($fruits, "id");
foreach ($carts as $cart) {
    echo count(array_intersect($cart, $fru)) ? "Fruit <br>" : "No Fruit <br>";
}

demo中查看结果


如果您想获得匹配水果的名称,请使用此代码

$fru = array_map(function($item){return $item['id'];}, $fruits);
foreach ($carts as $cart) {
    $find = array_intersect($cart, $fru);
    if (count($find)){
        $result = implode(", ", array_map(function($item) use($fru){
            return array_search($item, $fru);
        }, $find));
        echo "Fruit ({$result})\n";
    } else
        echo "No Fruit \n";
}

输出:

Fruit (Peach, Banana)
No Fruit 
Fruit (Apple)

demo中查看结果