okovalev
@okovalev

Как искать в многомерном массиве?

Как вывести "amount": 8.74, где ключ значения равно "alias": "qw_wallet_rub"?
{
    "accounts": [
        {
            "alias": "mc_beeline_rub",
            "fsAlias": "qb_mc_beeline",
            "bankAlias": "QIWI",
            "title": "MC",
            "type": {
                "id": "MC",
                "title": "Счет мобильного кошелька"
            },
            "hasBalance": false,
            "balance": null,
            "currency": 643
        },
        {
            "alias": "qw_wallet_rub",
            "fsAlias": "qb_wallet",
            "bankAlias": "QIWI",
            "title": "WALLET",
            "type": {
                "id": "WALLET",
                "title": "QIWI Wallet"
            },
            "hasBalance": true,
            "balance": {
                "amount": 8.74,
                "currency": 643
            },
            "currency": 643
        }
    ]
}
  • Вопрос задан
  • 135 просмотров
Решения вопроса 3
medbrat69
@medbrat69
Основатель toster.ru
Два вложенных друг в друга foreach. Первый ищет "alias": "qw_wallet_rub" и передает выполнение вложенному foraech, который уже будет искать в "balance", для этого нужно будет сделать условие, чтобы он не перебирал весь json.
Ответ написан
wagoodoogoo
@wagoodoogoo
prestashop, webix, phalcon, vue, slim, craft cms
$balance = function($alias) use ($json) {
    $Array = json_decode($json, true)["accounts"];
    $key = array_search($alias, array_column($Array, "alias"));
    return $key && isset($Array[$key]["balance"]["amount"])?$Array[$key]["balance"]["amount"]:null;
};
var_dump($balance("qw_wallet_rub"));
var_dump($balance("mc_beeline_rub"));
Ответ написан
abyrvalg
@abyrvalg
$arr = \json_decode($a, true);

$reducer = function ($carry, $item): float {
    if ('qw_wallet_rub' === $item['alias'] ?? null) {
        return $carry + $item['balance']['amount'] ?? 0.0;
    }
    return (float)$carry;
};

$result = \array_reduce($arr['accounts'], $reducer);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы