Сбросить значение в многомерном массиве на основе одного из значений - PullRequest
0 голосов
/ 11 мая 2018

Я пытаюсь сбросить строку в многомерном массиве на основе нахождения одного из значений (код продукта)

Вот несколько упрощенная структура / содержимое массива:

Array ([0] => Array ( [item_id] => code1 [item_desc] => first product  [item_price] => 5.45 )
[1] => Array ( [item_id] => code2 [item_desc] => second product  [item_price] => 9.25 ))

Следующее работает нормально, за исключением попыток удалить первый элемент [0] в массиве - поэтому первый элемент в корзине удалить нельзя.

$pid = 'code2';

$key = array_search($pid, array_column($_SESSION['cart_array'], 'item_id'));

if($key) {
    unset($_SESSION['cart_array'][$key]);
    sort($_SESSION["cart_array"]);
    }

Где значение $ pid= 'code1', $ key возвращает false, а содержимое переменной сеанса остается неизменным

Я попытался использовать цикл foreach, который найдет значение, но мне не удалось вернуться к ключу

foreach ($_SESSION['cart_array'] as $search)
    {
        if($pid == $search['item_id'])
        {
        echo key($search);            // returns item_id
        }
    }

Любая помощь высоко ценится.

Ответы [ 3 ]

0 голосов
/ 11 мая 2018

При использовании возвращаемого значения array_search() это может вернуть 0 для первого элемента (как вы знаете), а когда вы проверяете 0 - это то же самое, что и ложь, вам нужно проверить ключ, чтобы он не был эквивалентен ложь ...

if($key !== false) {
0 голосов
/ 11 мая 2018

Используйте более простой подход:

$_SESSION['cart_array'] = array_filter($_SESSION['cart_array'], function ($item) use ($pid) {
    return $item['item_id'] != $pid;
});

Это фильтрует все элементы массива, которые соответствуют $pid.

0 голосов
/ 11 мая 2018

Я думаю, это то, что вы хотите.

foreach ($_SESSION['cart_array'] as $key => $search)
{
    if($pid == $search['item_id'])
    {
        echo $key;
    }
}
...