Как вывести значение из ассоциативного массива не зная ключа?

Есть в 1С-Битрикс массив, нужно из него вывести значение определенного ключа, название конечного ключа известно, но вот чтобы до него добраться нужно пройти через неизвестный ключ, он меняется каждый раз (это ID товарной корзины).

Вот массив в PHP: Вывел его так:

<pre>
<?print_r($arResult["BASKET"]);
</pre>

Получилось:

                Array
(
    [541199] => Array
        (
            [MODULE] => catalog
            [PRODUCT_ID] => 17906
            [ID] => 541199
            [LID] => s1
            [QUANTITY] => 1
            [WEIGHT] => 0.00
            [DELAY] => N
            [CAN_BUY] => Y
            [PRICE] => 2134.0000
            [CUSTOM_PRICE] => N
            [BASE_PRICE] => 2200.0000
            [PRODUCT_PRICE_ID] => 12389
            [PRICE_TYPE_ID] => 1
            [CURRENCY] => RUB
            [BARCODE_MULTI] => N
            [RESERVED] => N
            [RESERVE_QUANTITY] => 
            [NAME] => Усилитель
            [CATALOG_XML_ID] => clothes
            [VAT_RATE] => 0.0000
            [NOTES] => Розничная цена
            [DISCOUNT_PRICE] => 66.0000
            [PRODUCT_PROVIDER_CLASS] => CCatalogProductProvider
            [CALLBACK_FUNC] => 
            [ORDER_CALLBACK_FUNC] => 
            [PAY_CALLBACK_FUNC] => 
            [CANCEL_CALLBACK_FUNC] => 
            [DIMENSIONS] => a:3:{s:5:"WIDTH";N;s:6:"HEIGHT";N;s:6:"LENGTH";N;}
            [TYPE] => 
            [SET_PARENT_ID] => 
            [DETAIL_PAGE_URL] => /catalog/podveska/
            [FUSER_ID] => 25286725
            [MEASURE_CODE] => 7
            [MEASURE_NAME] => Компл
            [ORDER_ID] => 27252
            [DATE_INSERT] => Bitrix\Main\Type\DateTime Object
                (
                    [value:protected] => DateTime Object
                        (
                            [date] => 2020-05-12 12:58:13.000000
                            [timezone_type] => 3
                            [timezone] => Europe/Moscow
                        )

                )

            [DATE_UPDATE] => Bitrix\Main\Type\DateTime Object
                (
                    [value:protected] => DateTime Object
                        (
                            [date] => 2020-05-12 12:59:13.000000
                            [timezone_type] => 3
                            [timezone] => Europe/Moscow
                        )

                )

            [PRODUCT_XML_ID] => 7120
            [SUBSCRIBE] => N
            [RECOMMENDATION] => 
            [VAT_INCLUDED] => Y
            [SORT] => 100
            [DATE_REFRESH] => 
            [DISCOUNT_NAME] => [4] 3% скидка
            [DISCOUNT_VALUE] => 3%
            [DISCOUNT_COUPON] => 
            [FORMATED_SUM] => 2 134 руб.
            [PREVIEW_PICTURE] => 91689
            [DETAIL_PICTURE] => 91690
            [PICTURE] => Array
                (
                    [WIDTH] => 110
                    [HEIGHT] => 73
                    [SIZE] => 11482
                )

            [WEIGHT_FORMATED] => 0 кг
            [PRICE_FORMATED] => 2 134 руб.
            [BASE_PRICE_FORMATED] => 2 200 руб.
            [DISCOUNT_PRICE_PERCENT] => 3
            [DISCOUNT_PRICE_PERCENT_FORMATED] => 3%
            [MEASURE_TEXT] => Компл
        )

)

Вопрос, как мне вывести [PRICE_FORMATED], не зная [541199]? так как этот ID у каждого заказа свой

Пробовал:

  • $arResult["BASKET"][][PRICE_FORMATED]
  • $arResult["BASKET"][0][PRICE_FORMATED]
  • $arResult["BASKET"][id][PRICE_FORMATED]

не понимаю как вывести или хотя бы получить значение "541199"?


Ответы (3 шт):

Автор решения: Walfter

Если вам известен ID то

$arResult['BASKET'][541199]['PRICE_FORMATED'];

Если вам нужен первый элемент массива

$arResult['BASKET'][array_key_first($$arResult['BASKET'])]['PRICE_FORMATED'];

Если конкретный то

$index = 5; // получаем пятый элемент массива
$arResult['BASKET'][array_keys($arResult['BASKET'])[$index - 1]]['PRICE_FORMATTED']
→ Ссылка
Автор решения: Ипатьев

Это действительно не так просто.

Здесь пригодятся функции для работы внутренним указателем массива.

  • первый элкмент массива, не зная ключа, вернет функция reset()
  • после этого можно также получить и ключ, спомощью и key().

    $data = reset($arResult["BASKET"][0]); // желаемый массив
    $key = key($arResult["BASKET"][0]); // 
    

Хотя конечно можно и без специальных знаний, просто имеющимися инструментами. У нас есть массив? Для работы с массивами служит форич

foreach($arResult["BASKET"][0] as $key => $data) {
    echo $data['PRICE_FORMATED'];
}
→ Ссылка
Автор решения: gelmutdm

Так же, в дополнение к предыдущим ответам, могу предложить:

<?php

$array = [
    '541199' => [
        'DOCS' => 'test_docs',
        'TEXT' => 'text_side'
    ],
];

$outArray = call_user_func_array('array_merge', $array);

var_dump($outArray);

/*
array(2) { ["DOCS"]=> string(9) "test_docs" ["TEXT"]=> string(9) "text_side" }
*/
→ Ссылка