petsk
petsk

Reputation: 414

Search php multidimensional array and retrieve key values

I have this $order array and want to store the data in a mysql database.

I need to sort out the products ([type] => physical) and put the key values in one mysql table, and put the other types ([type] => discount and [type] => shipping_fee) in two other tables.

[cart] => Array
(
    [items] => Array
        (
            [0] => Array
                (
                    [type] => physical
                    [name] => Apple iPhone
                    [quantity] => 2
                    [reference] => ABC61
                    [tax_amount] => 329
                    [unit_price] => 5490
                )

            [1] => Array
                (
                    [type] => shipping_fee
                    [name] => FedEx Express
                    [quantity] => 1
                    [reference] => SHIPPING
                    [tax_amount] => 58
                    [unit_price] => 290
                )

            [2] => Array
                (
                    [type] => physical
                    [name] => IBM Laptop
                    [quantity] => 1
                    [reference] => XYZ10
                    [tax_amount] => 700
                    [unit_price] => 8000
                )

            [3] => Array
                (
                    [type] => discount
                    [name] => Discount Coupon
                    [quantity] => 1
                    [reference] => DISCOUNT
                    [tax_amount] => 0
                    [unit_price] => -650
                )

        )
)

Something like this, but I don't know how to properly search the array and retrive the sibling key values:

if ([type] == 'physical') {
  get key values for [name] and [quantity] .. insert them into table products
} elseif ([type] == 'shipping_fee') {
  get key values for [name] and [quantity] .. insert them into table shipping
} elseif ([type] == 'discount') {
  get key values for [name] and [quantity] .. insert them into table discounts
}

Upvotes: 1

Views: 72

Answers (2)

AbraCadaver
AbraCadaver

Reputation: 78994

Here's one way using a switch to determine table names:

foreach($order['cart']['items'] as $values) {
    switch($values['type']) {
        case 'physical':
            $table = 'products';
            break;
        case 'shipping_fee':
            $table = 'shipping';
            break;
        case 'discount':
            $table = 'discounts';
            break;
    }    
    $query = "INSERT INTO $table (name, quantity)
                     VALUES ({$values['name']}, {$values['quantity']})";
}

Upvotes: 2

Ricardo Garza V.
Ricardo Garza V.

Reputation: 909

how about something like this

$physical = array_filter($cart['items'],function($item){
    return $item['type'] == "physical";
});
foreach($physical as $item){
    //make your inserts
}

The array_filter function in php takes an array, and a function that is called for each element in the array, and returns a new array for each element that evaluated as true.

Upvotes: 0

Related Questions