Получить субмассив из многомерного массива с помощью php

Я хочу получить значение из многомерного массива с помощью PHP, Я передаю ключ функции и, если ключ содержит значение (т.е. без какого-либо значения массива), он вернет его. Но если этот ключ содержит значение массива, он вернет весь подмассив.

Я добавляю образец массива для этого.

<?php

// prepare a list of array for category, subcategory etc...

$category = array(
'Account' => array(
    'Show Balance' => array(
        'Recharge' => 2300,
        'Success' => 12000,
        'Failure' => 25000,
    ),
    'Balance History' => 'your balance is very low for last 2 years',
    'Mini Statement' => 'This is your mini statement. You can have a look of your transaction details',
    'Last Transaction' => 25000
), 
'Deposit' => array(
    'Deposit Limit' => 40000,
    'Make Deposit' => 'Please go to the nearest branch ans deposit the money.',
    'Last Deposit' => 12000
), 
'FAQ' => array(
    'How To Open An Account' => 'Go to your nearest branch fill up a form, submit it to the branch manger with required supporting documents.',
    'How To Withdraw Money' => 'Go to any ATM center swipe the card enter pin and get your money.',
    'How To Add Money' => 'You need to go to your nearest branch and deposit money over there.'
), 
'Loan' => array(
    'Home Loan' => 'This is home loan related answer',
    'Personal Loan' => 'This is personal loan related answer',
    'Car Loan' => 'This is car loan related answer',
    'Bike Loan' => 'This is bike loan related answer'
) ,
'Test',

);

Теперь, если я передам свой массив $category и 'Recharge' в качестве параметра любому PHP функция должна вернуть мне 2300 в результате. Теперь, если я передам свой массив $category и 'Show Balance' в качестве параметра любому PHPфункция должна вернуть меня

array(
        'Recharge' => 2300,
        'Success' => 12000,
        'Failure' => 25000,
    ) 

в следствии.

Много искал в Google, но не смог получить ответ.

3 ответа

Решение

Напишите рекурсивную функцию для этого. делать foreach и проверить ключ массива с переданным ключом, если совпадает возвращаемый массив. если не совпадает и проверьте значение массива, если это массив с is_array(), если да, вызовите функцию еще раз, иначе верните значение

function getData($categoryArray, $key){
    foreach($categoryArray as $k => $value){ 
        if($k==$key) return $value; 
        if(is_array($value)){ 
            $find = getData($value, $key);
            if($find){
                return $find;
            } 
        }
    }
    return null;
}

$result1 = getData($category, 'Show Balance');
var_dump($result1);
$result = getData($category, 'Recharge');
var_dump($result);

демонстрация

Попробуйте эту функцию рекурсивным способом:

function get_key_val($arrs, $k) {
    foreach( $arrs as $key=>$val ) {
        if( $key === $k ) {
            return $val;
        }
        else {
            if( is_array( $val ) ) {
                $ret = get_key_val( $val, $k );

                if( $ret !== NULL) {
                    return $ret;
                }
            }
        }
    }

    return NULL;
}

echo get_key_val( $category, "Recharge" ); // outputs 2300

Это может проходить через каждый элемент переданного массива, используя foreach и рекурсию, до тех пор, пока индекс не будет найден, и возвращает значение индекса (массив или нет).

Чтобы получить Показать баланс попробуйте это:

print_r($category['Account']['Show Balance']);

Чтобы получить перезарядку попробуйте это:

print_r($category['Account']['Show Balance']['Recharge']);

Я только что проверил код, чтобы убедиться, что он работает, он отлично работает.

--Редактировать--

foreach ($category as $cat) {
  print_r($cat['Account']['Recharge']);
  print_r($category['Account']['Show Balance']);
}
Другие вопросы по тегам