1

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

[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],只需将它们在数组中上移一级。

4

4 回答 4

5

您可以使用array_mapwhich 返回一个数组,其中包含应用函数后前一个数组的所有元素。

在这种情况下,它将简单地获取索引处的数组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);
于 2013-05-15T20:59:07.537 回答
0

一个简单的解决方案,假设密钥始终为en,子密钥始终为(仅)datatypedata

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

如果该数组结构发生变化(它缺乏可扩展性),该代码将来可能会给您带来问题,但是根据您提供的信息,它可以为您提供所需的内容。

于 2013-05-15T20:55:26.710 回答
0

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

你想要做的是展平阵列。但是如果你想保留你提到的所有其他子数组,你可能会查找array_merge.

于 2013-05-15T21:00:01.633 回答
0

在使用 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);
于 2016-07-21T15:56:39.987 回答