ssuhat
ssuhat

Reputation: 7656

Remove level in a multidimensional array by replacing parent element with its subarray data

I've got an multidimensional array.

{
    "id": "13",
    "name": "Example",
    "location_name": "NY",
    "phone": [
        {
            "number": "0617357707"
        }
    ],
    "facilities": {
        "data": [
            {
                "name": "AC"
            },
            {
                "name": "Wi-Fi"
            }
        ]
    }
}

The problem I want to solve is at "facilities". Inside facilities, there is a data object. How can I remove the data without removing the content "data"?

Expected result:

{
    "id": "13",
    "name": "Example",
    "location_name": "NY",
    "phone": [
        {
            "number": "0617357707"
        }
    ],
    "facilities": [
        {
            "name": "AC"
        },
        {
            "name": "Wi-Fi"
        }
    ]
}

I've tried using array_walk or flatten but not getting it right.

Upvotes: 1

Views: 66

Answers (1)

Andrius
Andrius

Reputation: 5939

Looks like you could just do:

$results->facilities = $results->facilities->data

Working example:

<?php

$var = json_decode('{
    "id": "13",
    "name": "Example",
    "location_name": "NY",
    "phone": [
        { "number": "0617357707" }
    ],
    "facilities": {
        "data": [
            { "name": "AC" }, { "name": "Wi-Fi" }
        ]
    }
  }');
var_dump($var);

$var->facilities = $var->facilities->data;
var_dump($var);

Upvotes: 3

Related Questions