Хранить значения на основе ключа в многомерном массиве PHP

#php #arrays #multidimensional-array

#php #массивы #многомерный-массив

Вопрос:

Я хотел бы сохранить значения из следующего массива $cart_item:

 [addons] => Array( 
    [0] => Array(
        [name] => First Name - First Name
        [value] => Gary
        [price] =>
    )
    [1] => Array(
        [name] => Church Information - Name
        [value] => Victory Bible Church
        [price] =>
    )
    [2] => Array(
        [name] => Shirt Size
        [value] => XL
        [price] =>
    )
)
 

Я понял, что я не могу получить значение на основе индекса, потому что этот массив иногда будет иметь больше вложенных массивов. Например, я не могу использовать следующую строку для хранения данных:

 $shirt_size = $cart_item['addons'][2]['value'];
 

Потому что кто-то может добавить в массив имя «Информация о церкви — Город», и это примет индекс массива [2], который затем заставит переменную $ shirt_size принимать значение «Информация о церкви — город». Я не хочу, чтобы это произошло.

Есть только 2 других возможных массива, которые будут включены. Я хочу сохранить все возможные значения, связанные с именем.

Может ли кто-нибудь помочь мне с этим?

Комментарии:

1. Где находится код, который генерирует указанный выше массив?

2. @Mooseman этот массив получен из плагина WooCommerce.

Ответ №1:

Если вам нужно каждое из значений в переменных, вы можете использовать значение ключа ‘name’ для хранения значения ключа ‘value’.

 foreach ($cart_item['addons'] as $key => $val) {
    $name = strtolower(str_replace(' ','_', $val['name']));
    $name = $val['value'];
}

echo $shirt_size; //output as XL
 

или

если вам нужен только размер рубашки, вы можете применить условие и получить свое значение.

 foreach ($cart_item['addons'] as $key => $val) {
    if ($val['name'] == 'Shirt Size') {
        $shirt_size = $val['value'];
    }
}

echo $shirt_size; //output as XL
 

Надеюсь, это поможет вам получить требуемые значения.

Комментарии:

1. Еще раз спасибо @v2solutions, ответ кажется таким простым после того, как я его увижу.