合并对象和数组

时间:2018-03-15 15:24:22

标签: php json object

我将一些json格式的数据发布到php脚本,这些数据需要替换会话(数组)中的现有数据。

这是我发布到我的PHP脚本的内容:

Array
(
    [0] => stdClass Object
        (
            [product] => Bad 1
            [quantity] => 2
        )

    [1] => stdClass Object
        (
            [product] => Bad 14
            [quantity] => 1
        )

)

这是我的会话数组($_SESSION['cart']):

Array
(
    [Bad 1] => Array
        (
            [artikelid] => 2
            [product] => Bad 1
            [price] => 1000
            [picture] => cms/images/bad.jpg
            [quantity] => 2
            [alias] => bad1
            [catalias] => baden
        )

    [Bad 14] => Array
        (
            [artikelid] => 11
            [product] => Bad 14
            [price] => 800
            [picture] => images/defaultimage.jpg
            [quantity] => 1
            [alias] => bad-14
            [catalias] => baden
        )

)

我希望发布的数量值替换会话数组中的数量值,但仅限于正确的产品库。所以,如果我发布数量' 10'产品'坏1'只有关键数量不好1'需要用该值替换。

当发布多个产品时,例如我的例子(发布的对象)也会这样。

如何将对象更改为数组并将其与我的会话数组合并(仅替换数量)?

我试过类似的东西,但这仅适用于一个已发布的值。

//Wanneer er een post waarde is vanaf het ajax script:
if($_POST['product']){
    //Stop de productnaam in de variabele $prod
    $prod = $thisProduct['product'] ;
    //Als er nog geen sessie bestaat, maak deze dan aan
    if (!isset($_SESSION['cart'])) {
         //en maak er gelijk een array van
       $_SESSION['cart'] = [];
    }
    //Als de productnaam nog niet voorkomt in de sessie, voeg deze dan toe inclusief de overige array waarden
    if (!isset($_SESSION['cart'][$prod])) {
       $_SESSION['cart'][$prod] = $thisProduct;
    }
    //Als deze wel voorkomt voeg hem dan niet toe maar tel de quantity op bij het bestaande product
    else {
       $_SESSION['cart'][$prod]['quantity'] += $thisProduct['quantity'];
    }
}

我在Don's Panic的帮助下解决了这个问题:

$quantityobject = $_POST['quantityobject'];

$arrayquantity = json_decode($quantityobject);

foreach ($arrayquantity as $object) {
    // Check if product exists in array
    if (isset($_SESSION['cart'][$object->product])) {
        // if so replace quantity with posted one
       $_SESSION['cart'][$object->product]['quantity'] = $object->quantity;
    }
}

1 个答案:

答案 0 :(得分:1)

我认为它看起来比你制作它简单一些。您不必将对象转换为数组并合并它们。您可以按原样使用它们,只需迭代对象数组并更新相应产品的会话数据。

foreach ($posted_data as $object) {
    $_SESSION['cart'][$object->product]['quantity'] = $object->quantity;
}

在尝试更新产品并以某种方式处理之前,您可能希望包含一些检查产品是否存在于会话数组中的代码,尽管这会创建一个只有数量的不完整产品。