Как вывести значение из ассоциативного массива не зная ключа?
Есть в 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 шт):
Если вам известен 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'];
}
Так же, в дополнение к предыдущим ответам, могу предложить:
<?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" }
*/