展平多维数组

时间:2014-08-24 23:44:24

标签: php arrays multidimensional-array

我需要一些帮助格式化我从api获得的数组,目前的格式对我来说很难处理,所以我想改变它以获得更实用的东西。 我有以下数组:

                [attributes] => Array
                    (
                        [0] => Array
                            (
                                [attribute] => Healing
                                [modifier] => 179
                            )

                        [1] => Array
                            (
                                [attribute] => Toughness
                                [modifier] => 128
                            )

                        [2] => Array
                            (
                                [attribute] => ConditionDamage
                                [modifier] => 128
                            )

我想把它变成这个:

                [attributes] => Array
                    (
                                [Healing] => 179
                                [Toughness] => 128
                                [ConditionDamage] => 128
                     )

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

如果您使用的是PHP> = 5.5

$array['attributes'] = array_column(
    $array['attributes'],
    'attribute',
    'modifier'
);

其他

$array['attributes'] = array_walk(
    $array['attributes'],
    function (&$value) {
        $value[$value['attribute']] = $value['modifier'];
        unset($value['attribute'], $value['modifier']);
    }
);

答案 1 :(得分:1)

使用PHP> = 5.5,您可以将array_column()array_combine()结合使用。

$new_arr = array_combine(array_column($arr, 'attribute'), array_column($arr, 'modifier'));

See demo


否则,简单的foreach将起作用:

foreach ($arr as $ar) {
    $new_arr[$ar['attribute']] = $ar['modifier'];
}

See demo

答案 2 :(得分:1)

function flattenAPIarray($APIArray)
{
    $flatArray = [];

    foreach($APIArray as $element)
    {
        $key = array_keys($element);
        $flatArray[$element[$key[0]]] = $element[$key[1]];
    }

    return $flatArray;
}

试试这个功能,我为你写的。它没有以任何方式推广,但可以与多维关联数组一起使用。线索是使用array_keys()函数,因为你没有任何索引可以使用foreach循环进行迭代。

希望有所帮助! (这是我的第一个答案 - 善良:o)