如何匹配2个数组,并循环显示数组值?

时间:2017-03-24 05:25:10

标签: php arrays

我正在尝试匹配两个数组,如果匹配则循环遍历数组值以在页面上显示它们。

这就是我的做法。

$productIDs = array(
    '0' => array(
        'product_id' => '565355',
        'product_name' => 'stackPDF',
        'product_file' => 'http://www.example.com/stack.pdf',
    ),
    '1' => array(
        'product_id' => '563423',
        'product_name' => 'lostPDF',
        'product_file' => 'http://www.example.com/lost.pdf',
    ),
    '3' => array(
        'product_id' => '4442',
        'product_name' => 'No product',
        'product_file' => '',
    )
);

function getProducts($productIDs){

    $getIDs  = explode(',', $_GET['product_id']);

    $intersection = array();
    foreach($productIDs as $items)
    {
        $intersection[] = array_intersect($items, $getIDs);
    }

    if(!empty($intersection)){
        return $intersection;
    } else {
        echo "There are no products available!";
    }
}
$getProducts = getProducts($productIDs);

function getDownloads($getProducts){

    foreach($getProducts as $item){
        print_r($item);
    }

}
$getDownloads = getDownloads($getProducts);

在getProducts()函数中,我正在检查标头中的product_id是否与$ productID中的任何product_id匹配,以仅显示其中的product_id的可用链接标题。

$ getProducts变量具有已在数组中匹配的可用product_file,并且在$ getDownloads中我试图“如果id可用,则循环并显示{{1}}参数值多维数组“但我似乎无法循环通过它,而是我无法弄清楚如何匹配它/返回值。

2 个答案:

答案 0 :(得分:0)

array_filter($array, function($v) use($id){ return $v['product_id'] == $id;})

答案 1 :(得分:0)

我能想到的最简单的方法是:

$item_exists =  array_filter($productIDs, function($item) use ($check) {
    return md5(json_encode($item)) == md5(json_encode($check));
});

json_encode会将数组序列化为字符串,而md5会创建一个比较键,如果它们相等,它将被插入$item_exists数组中。

编辑:我在考虑比较产品对象,但我猜您只需要ID,您可以使用以下内容:

$existing_values = array_filter($productIDs, function($p)use($getIDs){
     return in_array($p["product_id"], $getIDs); 
});