【问题标题】:php array_map removes more than requiredphp array_map 删除了超出要求的内容
【发布时间】:2013-05-25 02:26:04
【问题描述】:

我有一个像下面这样的数组。 . .

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] 的值被截断。

谢谢。

【问题讨论】:

  • 当用于按索引访问字符串时,索引'en' 将被强制转换为 int (=> 0)。 BILL[0] => 'B'
  • 是的,它把字符串当作一个数组来处理,Yoshi 是对的。

标签: php array-map


【解决方案1】:

你可以进行类型检查:

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

尽管这样做可能就足够了:

$en['assets'] = $en['assets']['en'];

【讨论】:

  • 你的第二个想法是我使用的,好吧。 $en_new['code'] = $en['code']; 谢谢。
【解决方案2】:

您好,您可以将数组的资产部分作为参数传递给 array_map 函数,而不是将您提到的整个数组作为参数传递:

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

然后追加代码部分:

$en_new['code'] = $en['code'];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-13
    • 2016-03-15
    相关资源
    最近更新 更多