php array_map удаляет больше, чем требуется

У меня есть массив, подобный следующему. . .

Array
(
    [code] => BILL
    [assets] => Array
        (
            [en] => Array
                (
                    [labels] => Array
                        (
                            [datestamp] => April 30, 2013
                        )

                    [data] => Array
                        (
                            [Equity] => 88.83000000000
                            [Global] => 10.84000000000
                            [Other] => 0.33099095766
                        )

                )

        )

)

Я запустил функцию array_map для этого массива, чтобы удалить массив [en]

$en = array_map(function ($e){ return $e['en']; } , $en );

обратите внимание, как результирующий массив усек значение для [code] от BILL до B

Array
(
    [code] => B
    [assets] => Array
        (
            [labels] => Array
                (
                    [datestamp] => April 30, 2013
                )

            [data] => Array
                (
                    [Equity] => 88.83000000000
                    [Global] => 10.84000000000
                    [Other] => 0.33099095766
                )

        )

)

Любые советы о том, как этого избежать. Он удаляет массив с ключом [en] по мере необходимости, но я не хочу, чтобы значение для [code] было усечено.

Спасибо.


person jimlongo    schedule 29.05.2013    source источник
comment
Индекс 'en' будет приведен к типу int (=> 0) при использовании для доступа к строке по индексу. BILL[0] =› 'B'   -  person Yoshi    schedule 29.05.2013
comment
Да, он обрабатывает строку как массив, Йоши прав.   -  person    schedule 29.05.2013


Ответы (2)


Вы можете выполнить проверку типов:

$en = array_map(function ($e){
    if (is_array($e)) {
        return $e['en'];
    } else {
        return $e;
    }
} , $en );

Хотя может быть достаточно сделать вот это:

$en['assets'] = $en['assets']['en'];
person PleaseStand    schedule 29.05.2013
comment
ваша вторая идея - это то, что я использовал, ну вроде. $en_new['code'] = $en['code']; Спасибо. - person jimlongo; 30.05.2013

Привет, вместо того, чтобы передавать весь массив, который вы упомянули в качестве аргумента, вы можете передать часть активов массива в качестве аргумента функции array_map:

$en_new = array_map(function ($e){ return $e['en']; } , $en['assets'] );

а затем добавьте часть кода:

$en_new['code'] = $en['code'];
person jospratik    schedule 29.05.2013