将php数组重构为多个json数组

时间:2016-02-26 08:57:10

标签: php arrays json cakephp

我将这个PHP数组转换为json数组:

    array(
        'results' => array(
            (int) 0 => array(
                'unit_id' => '1',
                'unit_number' => '36-1',
                'unit_block' => 'PH1A',
                'unit_type' => 'River / Sea Facing',
                'unit_square_feet' => '1238',
                'unit_direction' => 'NW',
                'unit_level' => '36',
                'unit_price' => '793000',
                'book_status' => null
            ),
            (int) 1 => array(
                'unit_id' => '2',
                'unit_number' => '36-2',
                'unit_block' => 'PH3A',
                'unit_type' => 'River / Sea Facing',
                'unit_square_feet' => '1518',
                'unit_direction' => 'NW',
                'unit_level' => '36',
                'unit_price' => '996000',
                'book_status' => 'booked'
            ),
            (int) 2 => array(
                'unit_id' => '3',
                'unit_number' => '36-5',
                'unit_block' => 'PH1B',
                'unit_type' => 'City Facing',
                'unit_square_feet' => '1238',
                'unit_direction' => 'SE',
                'unit_level' => '36',
                'unit_price' => '793000',
                'book_status' => null
            ),
            (int) 3 => array(
                'unit_id' => '4',
                'unit_number' => '36-6',
                'unit_block' => 'P3B',
                'unit_type' => 'City Facing',
                'unit_square_feet' => '1518',
                'unit_direction' => 'SE',
                'unit_level' => '36',
                'unit_price' => '996000',
                'book_status' => null
            ),
          ),
    );

如果我想像下面这个结构那样返回json数组吗?

{
    "results":
        [
            {
                "unit_id": "1",
                "unit_number": "36-1",
                "unit_block": "PH1A",
                "unit_type": "River \/ Sea Facing",
                "unit_square_feet": "1238",
                "unit_direction": "NW",
                "unit_level": "36",
                "unit_price": "793000",
                "book_status": null
            }
        ],
        [
            {
                "unit_id": "2",
                "unit_number": "36-2",
                "unit_block": "PH3A",
                "unit_type": "River \/ Sea Facing",
                "unit_square_feet": "1518",
                "unit_direction": "NW",
                "unit_level": "36",
                "unit_price": "996000",
                "book_status": "booked"
            }
        ],
        [
            {
                "unit_id": "3",
                "unit_number": "36-5",
                "unit_block": "PH1B",
                "unit_type": "City Facing",
                "unit_square_feet": "1238",
                "unit_direction": "SE",
                "unit_level": "36",
                "unit_price": "793000",
                "book_status": null
            }
        ],
        [
            {
                "unit_id": "4",
                "unit_number": "36-6",
                "unit_block": "P3B",
                "unit_type": "City Facing",
                "unit_square_feet": "1518",
                "unit_direction": "SE",
                "unit_level": "36",
                "unit_price": "996000",
                "book_status": null
            }
        ],
}

当前返回的json数组结构。注意到“结果”之后还有一个数组。

{
    "results": [
        [
            {
                "unit_id": "1",
                "unit_number": "36-1",
                "unit_block": "PH1A",
                "unit_type": "River \/ Sea Facing",
                "unit_square_feet": "1238",
                "unit_direction": "NW",
                "unit_level": "36",
                "unit_price": "793000",
                "book_status": null
            }
        ],
        [
            {
                "unit_id": "2",
                "unit_number": "36-2",
                "unit_block": "PH3A",
                "unit_type": "River \/ Sea Facing",
                "unit_square_feet": "1518",
                "unit_direction": "NW",
                "unit_level": "36",
                "unit_price": "996000",
                "book_status": "booked"
            }
        ],
        [
            {
                "unit_id": "3",
                "unit_number": "36-5",
                "unit_block": "PH1B",
                "unit_type": "City Facing",
                "unit_square_feet": "1238",
                "unit_direction": "SE",
                "unit_level": "36",
                "unit_price": "793000",
                "book_status": null
            }
        ],
        [
            {
                "unit_id": "4",
                "unit_number": "36-6",
                "unit_block": "P3B",
                "unit_type": "City Facing",
                "unit_square_feet": "1518",
                "unit_direction": "SE",
                "unit_level": "36",
                "unit_price": "996000",
                "book_status": null
            }
        ],
    ]
}

到目前为止我的PHP代码:

   $results = array();
    foreach ($units as $key => $unit) {

    $unit = 
            array(
            'unit_id'=>$unit['Unit']['id'],
            'unit_number'=>$unit['Unit']['unit_number'],
            'unit_block' => $unit['Unit']['block'],
            'unit_type' => $unit['UnitType']['name'],
            'unit_square_feet' => $unit['Unit']['square_feet'],
            'unit_direction' =>$unit['Unit']['direction'],
            'unit_level' =>$unit['Unit']['level'],
            'unit_price' =>$unit['Unit']['price'],
            'book_status'=>$unit['Unit']['status']
        );
        $results['results'][$key] = array($unit);
                        }

        return json_encode($results,JSON_PRETTY_PRINT);

编辑:

向anwser @roullie发表评论,以下是我将$results['results'][$key] = array($unit);更改为$results['results'][$key] = $unit;时的结果

{
    "results": [
        {
            "unit_id": "1",
            "unit_number": "36-1",
            "unit_block": "PH1A",
            "unit_type": "River \/ Sea Facing",
            "unit_square_feet": "1238",
            "unit_direction": "NW",
            "unit_level": "36",
            "unit_price": "793000",
            "book_status": null
        },
        {
            "unit_id": "2",
            "unit_number": "36-2",
            "unit_block": "PH3A",
            "unit_type": "River \/ Sea Facing",
            "unit_square_feet": "1518",
            "unit_direction": "NW",
            "unit_level": "36",
            "unit_price": "996000",
            "book_status": "booked"
        },
    ]
}

1 个答案:

答案 0 :(得分:0)

尝试以下逻辑:

$units = array(
        'results' => array(
            (int) 0 => array(
                'unit_id' => '1',
                'unit_number' => '36-1',
                'unit_block' => 'PH1A',
                'unit_type' => 'River / Sea Facing',
                'unit_square_feet' => '1238',
                'unit_direction' => 'NW',
                'unit_level' => '36',
                'unit_price' => '793000',
                'book_status' => null
            ),
            (int) 1 => array(
                'unit_id' => '2',
                'unit_number' => '36-2',
                'unit_block' => 'PH3A',
                'unit_type' => 'River / Sea Facing',
                'unit_square_feet' => '1518',
                'unit_direction' => 'NW',
                'unit_level' => '36',
                'unit_price' => '996000',
                'book_status' => 'booked'
            ),
            (int) 2 => array(
                'unit_id' => '3',
                'unit_number' => '36-5',
                'unit_block' => 'PH1B',
                'unit_type' => 'City Facing',
                'unit_square_feet' => '1238',
                'unit_direction' => 'SE',
                'unit_level' => '36',
                'unit_price' => '793000',
                'book_status' => null
            ),
            (int) 3 => array(
                'unit_id' => '4',
                'unit_number' => '36-6',
                'unit_block' => 'P3B',
                'unit_type' => 'City Facing',
                'unit_square_feet' => '1518',
                'unit_direction' => 'SE',
                'unit_level' => '36',
                'unit_price' => '996000',
                'book_status' => null
            ),
          ),
    );
  $results = array();

    foreach ($units['results'] as $key => $unit) {


        $results['results'][] = array(
            'unit_id'=>$unit['unit_id'],
            'unit_number'=>$unit['unit_number'],
            'unit_block' => $unit['unit_block'],
            'unit_type' => $unit['unit_type'],
            'unit_square_feet' => $unit['unit_square_feet'],
            'unit_direction' =>$unit['unit_direction'],
            'unit_level' =>$unit['unit_level'],
            'unit_price' =>$unit['unit_price'],
            'book_status'=>$unit['book_status']
        );
                        }

      echo json_encode($results,JSON_PRETTY_PRINT);