If Key Value pair exists in multidimensional array

2019-06-05 07:36发布

问题:

I have a codeigniter shopping cart going and its "cart" array is the following:

Array (
[a87ff679a2f3e71d9181a67b7542122c] => Array
    (
        [rowid] => a87ff679a2f3e71d9181a67b7542122c
        [id] => 4
        [qty] => 1
        [price] => 12.95
        [name] => Maroon Choir Stole
        [image] => 2353463627maroon_3.jpg
        [custprod] => 0
        [subtotal] => 12.95
    )

[8f14e45fceea167a5a36dedd4bea2543] => Array
    (
        [rowid] => 8f14e45fceea167a5a36dedd4bea2543
        [id] => 7
        [qty] => 1
        [price] => 12.95
        [name] => Shiny Red Choir Stole
        [image] => 2899638984red_vstole_1.jpg
        [custprod] => 0
        [subtotal] => 12.95
    )

[eccbc87e4b5ce2fe28308fd9f2a7baf3] => Array
    (
        [rowid] => eccbc87e4b5ce2fe28308fd9f2a7baf3
        [id] => 3
        [qty] => 1
        [price] => 14.95
        [name] => Royal Blue Choir Stole
        [image] => 1270984005royal_vstole.jpg
        [custprod] => 1
        [subtotal] => 14.95
    )

)

My goal is to loop through this multidimensional array some how and if ANY product with the key value pair "custprod == 1" exists, then my checkout page will display one thing, and if no custom products are in the cart it displays another thing. Any help is appreciated. Thanks.

回答1:

Rather than looping over it, you can check for the custprod key using array_key_exists. Or simply check to see if arr['custprod'] isset (both functions handle null differently).

$key = "custprod";
$arr = Array(
    "custprod" => 1, 
    "someprop" => 23
);
if (array_key_exists($key, $arr) && 1 == $arr[$key]) {
    // 'custprod' exists and is 1
}


回答2:

function item_exists($cart, $custprod) {
    foreach($cart as $item) {
        if(array_key_exists("custprod", $item) && $item["custprod"] == $custprod) {
            return true;
        }
    }
    return false;
}

Now, you can use this function to check if product exist in stack:

if(item_exists($cart, 1)) {
    // true
} else {
   // false
}


回答3:

You still need to loop the array to check it:

$cust_prod_found = false;

foreach($this->cart->contents() as $item){
    if (array_key_exists("custprod", $item) && 1 == $item["custprod"]) {
        $cust_prod_found = true; break;
    }
}

if ($cust_prod_found) {
    // display one thing
} else {
    // display another thing
}