PHP数组移除键并上移值



我研究过类似的主题,但不是我想要做的。我有一个多维数组,如下所示。

[code]  =>  BILL
[assets] => Array
    (
        [en] => Array
            (
                [datatype] => My Assets
                [data] => Array
                    (
                        [Corporate Equity] => 41
                        [Global Equity] => 24
                        [Fixed Income – Government] => 22
                        [Fixed Income – Corporate] => 8.1
                        [Other] => 3.57
                    )
            )
    )

我想删除第一个内部数组,但保留其值。将它们在数组中向上移动一级,使其看起来像这样。

[code]   => BILL
[assets] => Array
    (
        [datatype] => My Assets
        [data] => Array
            (
                [Corporate Equity] => 41
                [Global Equity] => 24
                [Fixed Income – Government] => 22
                [Fixed Income – Corporate] => 8.1
                [Other] => 3.57
            )

    )

这只是数组的开始,在同一级别上还有其他相同键[en]的实例。

我已经尝试过unset, array_shift和其他,但我需要保持[en]的内容,只是将它们在数组中向上移动一个级别。

您可以使用array_map,它在应用该函数后返回一个包含前一个数组所有元素的数组。

在本例中,它将简单地获取索引为en的数组,并将其内容添加到新数组中。

http://php.net/manual/en/function.array-map.php

$arr = array('assets' => array(
    'en' => array(
        'datatype' => 'My Assets',
        'data' => array(
            'Corporate Equity' => 41,
            'Global Equity' => 24,
             'Fixed Income – Government' => 22,
             'Fixed Income – Corporate' => 8.1,
             'Other' => 3.57
        )
    )
));
$new_arr = array_map(function ($e) {
    return $e['en'];
}, $arr);

假设键始终为en,子键始终(仅)为datatypedata的简单解决方案:

$assets['datatype'] = $assets['en']['datatype'];
$assets['data'] = $assets['en']['data'];
unset( $assets['en'] );

如果数组结构将来发生变化(它缺乏可扩展性),这段代码可能会给您带来问题,但它可以根据您提供的信息得到您想要的。

array_shiftarray_pop相反。用于堆栈/队列类结构中,用于移除第一个元素http://php.net/manual/en/function.array-shift.php

你要做的是使数组变平。但是如果您想保留前面提到的所有其他子数组,您可以查找array_merge .

我在使用reader读取xml文件后遇到了同样的情况,返回的数组在每个级别插入了0键数组,如下所示:


'config' =>
           0 => 
               'products' =>
                            0 =>
                                'media' => 
                                 .
                                 .
                                 .

所以我构建了一个小函数来删除一个特定的键,并在二维数组中向上移动它的子键,在我的例子中,键是0。希望这也能帮助别人。


public function clearMaps(&$maps, $readerMaps, $omittedKey)
{
    if (is_array($readerMaps)) {
        foreach ($readerMaps as $key => $map) {
            if ($key !== $omittedKey) {
                $maps[$key] = [];
                $this->clearMaps($maps[$key], $readerMaps[$key], $omittedKey);
            } else {
                $this->clearMaps($maps, $readerMaps[$key], $omittedKey);
            }
        }
    } else {
        $maps = $readerMaps;
    }
}
// $maps: cleaned array, will start as empty array
// $readerMaps: array needs to be cleaned
// $omittedKey: array key to git rid of.
// first call is clearMaps([], $readerMaps, 0);

相关内容

  • 没有找到相关文章

最新更新