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

在php中从复杂关联数组中提取数据并放入新数组,php,arrays,associative-array,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' ),

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

$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'];
}
不幸的是,它只检索输入数组的最后一个元素

能找个更有经验的人帮忙吗


非常感谢。

您在每次迭代中都会覆盖这些值,因为您总是在
$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
是等效的,所以我使用了较短的变量;)

您在每次迭代中都会覆盖值,因为您总是写入
$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
是等效的,所以我使用了较短的变量;)

您必须向foreach中的数组添加索引:$output[$key][“name”]=

您必须向foreach中的数组添加索引:$output[$key][“name”]=

在foreach循环中尝试以下操作:-

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

在foreach循环中尝试此选项:-

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

要定义数组,无需使用
(int)0=>
要定义数组,无需使用
(int)0=>