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>';
}