从php中的复杂关联数组中提取数据并放入新数组中

时间:2014-05-27 10:07:30

标签: php arrays associative-array

我有一个复杂的数组,如下所示:

$input=array(
    (int) 0 => array(
        'XXX' => array(
            'id' => '7',
            'p_id' => '1',
            'address' => '9463',
            'arrival_time' => '2014-05-01 03:30:00'
        ),
        'YYY' => array(
            'id' => '1',
            'iden' => '1111',
            'name' => 'Tom'
        )
    ),
    (int) 1 => array(
        'XXX' => array(
            'id' => '9',
            'p_id' => '2',
            'address' => '9469',
            'arrival_time' => '2014-05-27 16:43:58'
        ),
        'YYY' => array(
            'id' => '2',
            'iden' => '2222',
            'name' => 'Sam'
        )
    ),
    (int) 2 => array(
        'XXX' => array(
            'id' => '3',
            'p_id' => '3',
            'address' => '9462',
            'arrival_time' => '2014-04-21 14:05:00'
        ),
        'YYY' => array(
            'id' => '3',
            'iden' => '3333',
            'name' => 'James'
        )
    )
)

我想将其转换为看起来像这样;

$output=array(
    (int) 0 => array(
        'name' => 'Tom',
        'iden' => '1111',
        'address' => '9463'
    ),
    (int) 1 => array(
        'name' => 'Sam',
        'iden' => '2222',
        'address' => '9469'
    ),
    (int) 2 => array(
        'name' => 'James',
        'iden' => '3333',
        'address' => '9462'
    )

我写了一些代码来解决这个问题:

foreach ( $input as $key => $value)
{
    $output['name']=$input[$key]['YYY']['name'];
    $output['iden']=$input[$key]['YYY']['iden'];
    $output['address']=$input[$key]['XXX']['address'];
}

不幸的是,它只检索输入数组的最后一个元素。

有人可以获得更多经验吗?

非常感谢。

3 个答案:

答案 0 :(得分:2)

您正在覆盖每次迭代中的值,因为您总是写入$output['name']等。

foreach ( $input as $key => $value)
{
    $output[$key] = array(
        'name' => $value['YYY']['name'],
        'iden' => $value['YYY']['iden'],
        'address' => $value['XXX']['address']
    );
}

此处的关键是使用$output[$key]而不是$output - 这样您就会在每次迭代中添加一个新元素。

$input[$key]$value也相同,所以我使用了较短的变体;)

答案 1 :(得分:1)

在你的foreach循环中试试这个: -

foreach ( $input as $key=>$value)
{
    $output[$key]['name']=$value['YYY']['name'];
    $output[$key]['iden']=$value['YYY']['iden'];
    $output[$key]['address']=$value['XXX']['address'];
}

答案 2 :(得分:0)

你必须在foreach中为数组添加一个索引:$ output [$ key] [“name”] = ...;