首页 > 解决方案 > 如何使用键值在多维数组中移动数组?

问题描述

如何使用键值移动多维数组中的数组?我正在使用 array_push 将值添加到多维数组。我有一个数组

$myArray = Array(Array('code' => '1','room' => Array('name' => 'Room-A')),Array('code' =>'1','room' => Array('name' => 'Room-B'
            )), Array('code' => '2','room' => Array('name' => 'Vip-1')),Array('code' => '2','room' => Array('name' => 'Vip-2')));

我尝试使用这样的代码:

for ($i=0; $i <count($myArray) ; $i++) { 
        if ($myArray[$i]['code']=='1') {
            array_push($myArray[$i]['room'], $myArray[$i]['room']);
        }
        else{
            array_push($myArray[$i]['room'], $myArray[$i]['room']);
        }
    }

我想要这样的结果:

Array
(
    [0] => Array
        (
           [code] => 1
           [room] => Array
             (
               [0] => Array
                 (
                    [name] => Room-A 
                 )
               [1] => Array
                 (
                   [name] => Room-B
                 )
             )
        )

    [1] => Array
      (
          [code] => 2
          [room] => Array
              (
             [0] => Array
                 (
                    [name] => Vip-1  
                 )
             [1] => Array
                 (
                   [name] => Vip-2
                 )
              )
        )
  )

知道如何加入这个数组吗?

标签: phparraysloops

解决方案


您可以使用array_reduce代码作为键将数组汇总为关联数组。用于array_values将关联数组转换为简单数组。

$myArray = ....

$result = array_values(array_reduce($myArray, function($c, $v){
    if ( !isset( $c[ $v['code'] ] ) ) $c[ $v['code'] ] = array( 'code' => $v['code'], 'room' => array() );
    $c[ $v['code'] ]['room'][] = $v['room'];
    return $c;
},array()));        

echo "<pre>";
print_r( $result );
echo "</pre>";

这将导致:

Array
(
    [0] => Array
        (
            [code] => 1
            [room] => Array
                (
                    [0] => Array
                        (
                            [name] => Room-A
                        )

                    [1] => Array
                        (
                            [name] => Room-B
                        )

                )

        )

    [1] => Array
        (
            [code] => 2
            [room] => Array
                (
                    [0] => Array
                        (
                            [name] => Vip-1
                        )

                    [1] => Array
                        (
                            [name] => Vip-2
                        )

                )

        )

)

推荐阅读