Home > Software design >  get value to multidimensional array
get value to multidimensional array

Time:09-17

I have json file that looks something like this:

{
"world": {
    "france": {
        "city": {
            "city_1": {
                "name": "paris",
                "titre": "lorem ipsum"
            },
            "city_2": {
                "name": "marseille",
                "titre": "dolor sit amet"
            }
        }
    },
    "usa": {
        "city": {
            "city_1": {
                "name": "new york",
                "titre": "lorem ipsum"
            },
            "city_2": {
                "name": "los angeles",
                "titre": "lorem ipsum"
            },
            "city_3": {
                "name": "portland",
                "titre": "lorem ipsum"
            }
        }
    }
}
}

I would like to display the list of countries with the cities, like this:

<option value="france" data-city="paris,marseille">france</option>
<option value="usa" data-city="new york,los angeles,portland">usa</option>

I tried something like this to display the countries, but I can't display the list of cities

    foreach ($data['world'] as $key => $value)
{

    $scenario .= '<option value="' . $key . ' data-city="">' . $key .'</option>';
}

CodePudding user response:

The cities are in a sub array so you need to do a second loop within your existing foreach to iterate over the cities.

You can create a new array to capture the individual city names in the sub-loop, and then implode() them in your <option>:

$cityArray = array();
foreach($values['city'] as $cityKey=>$cityValue) {
    $cityArray[] = $cityValue['name'];
}

$scenario .= '<option value="' . $key . ' data-city="'.implode(',',$cityArray).'">' . $key .'</option>';

Here's a working example: https://3v4l.org/l986m

CodePudding user response:

Extract the name elements from the city and implode them:

foreach ($data['world'] as $key => $value)
{
    $cities = implode(',', array_column($value['city'], 'name'));
    $scenario .= '<option value="' . $key . '" data-city="' . $cities . '">' . $key .'</option>';
}
  • Related