Допустимый цикл foreach, вызывающий 500 внутренних ошибок сервера в действительном запросе Ajax - PullRequest
0 голосов
/ 02 ноября 2018

У меня есть массив $products:

$products = [

    1031 => [
        'id'    => '1031',
        'name'  => 'TR16',
        'price' => 98.75
    ],
    1032 => [
        'id'    => '1032',
        'name'  => 'TR16G',
        'price' => 148.75
    ]
];  

И массив $ newItemIds:

$newItemIds = [

    1031 => [
        'id'       => 1031,
        'quantity' => 4
    ],
    1032 => [
        'id'       => 1032,
        'quantity' => 2
    ]
];

Я пытаюсь перебрать эти массивы и изменить массив $products, чтобы он включал quantity.

Мой цикл выглядит так:

foreach($products as &$product) {
    foreach($newItemIds as $key => $value) {
        if ($product['id'] == $value['id']) {
            $product['quantity'] = $value['quantity'];
        }
    }
}

На phptester.net он печатает этот результат (именно то, что я хочу):

Array
(
    [1031] => Array
        (
            [id] => 1031
            [name] => TR16
            [price] => 98.75
            [quantity] => 4
        )

    [1032] => Array
        (
            [id] => 1032
            [name] => TR16G
            [price] => 148.75
            [quantity] => 2
        )

)

Перед циклом я успешно echo json_encode($products) возвращаюсь к $.ajax и просматриваю это в консоли.

0: {id: "1031", name: "TR16", price: "98.75"}
1: {id: "1032", name: "TR16G", price: "148.75"} 

Запрос $.ajax работает.

Тем не менее, после цикла, когда я повторяю эхо $products снова, чтобы увидеть измененный массив (echo json_encode($products)), я получаю 500 (Internal Server Error).

Аякс работает; цикл работает, но что-то не так.

Если у кого-то есть представление о том, что я могу делать неправильно, я был бы признателен за понимание.

Вот весь проверенный код:

<code><?php

$products = [

    1031 => [
        'id'    => '1031',
        'name'  => 'TR16',
        'price' => 98.75
    ],
    1032 => [
        'id'    => '1032',
        'name'  => 'TR16G',
        'price' => 148.75
    ]
];

$newItemIds = [

    1031 => [

        'id'       => 1031,
        'quantity' => 4
    ],
    1032 => [
        'id'       => 1032,
        'quantity' => 2
    ]
];  

foreach($products as &$product) {
    foreach($newItemIds as $key => $value) {
        if ($product['id'] == $value['id']) {
            $product['quantity'] = $value['quantity'];
        }
    }
}

echo '<pre>';
print_r($products);
echo '
';

1 Ответ

0 голосов
/ 02 ноября 2018

Как насчет этого с array_replace_recursive ()

<?php

$products = [

    1031 => [
        'id'    => '1031',
        'name'  => 'TR16',
        'price' => 98.75
    ],
    1032 => [
        'id'    => '1032',
        'name'  => 'TR16G',
        'price' => 148.75
    ]
];  


$newItemIds = [

    1031 => [
        'id'       => 1031,
        'quantity' => 4
    ],
    1032 => [
        'id'       => 1032,
        'quantity' => 2
    ]
];

$products_with_quantity = array_replace_recursive($products, $newItemIds);
print_r($products_with_quantity);

ДЕМО: https://3v4l.org/YQQpF

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...