I have a simple array of data, and I would like to make it multidimensional. To keep things simple, I've written below an array that reflects what I've got, and another that reflects how it should be.
The problem is I don't know the keys like 'europe' or 'france', or 'paris'.
I need to determine if the continent is a new key, so I make an array with it. Same with the countries, then cities etc.
I have this :
Array
(
[0] => Array
(
[continent] => europe
[country] => france
[city] => paris
[monument] => tour eiffel
)
[1] => Array
(
[continent] => europe
[country] => england
[city] => london
[monument] => big ben
)
[2] => Array
(
[continent] => australia
[country] => australia
[city] => sydney
[monument] => opera
)
[3] => Array
(
[continent] => america
[country] => usa
[city] => new york
[monument] => empire state building
)
[4] => Array
(
[continent] => america
[country] => usa
[city] => new york
[monument] => statue of liberty
)
)
I need that :
Array
(
[0] => Array (
[europe] => Array (
[france] => Array (
[paris] => Array (
[0] => eiffel tower
)
)
[england] => Array (
[london] => Array (
[0] => big ben
)
)
)
[australia] => Array (
[australia] => Array (
[sydney] => Array (
[0] => opera
)
)
)
[america] => Array (
[usa] => Array (
[new york] => Array (
[0] => empire state building
[1] => statue of liberty
)
)
)
)
)
Any ideas ?
Use a loop -
$new = array();
foreach($array as $data) {
$new['continents'][$data['continent']][$data['country']][$data['city']][] = $data['monument'];
}
Output
array(1) {
["continents"]=>
array(3) {
["europe"]=>
array(2) {
["france"]=>
array(1) {
["paris"]=>
string(11) "tour eiffel"
}
["england"]=>
array(1) {
["london"]=>
string(7) "big ben"
}
}
["australia"]=>
array(1) {
["australia"]=>
array(1) {
["sydney"]=>
string(5) "opera"
}
}
["america"]=>
array(1) {
["usa"]=>
array(1) {
["new york"]=>
string(17) "statue of liberty"
}
}
}
}
This one should work, it really reads bad...
$target = array();
foreach($source as $item) {
//add continent
if (!array_key_exists($item['continent'], $target)
$target[$item['continent']] = array();
//add country
if (!array_key_exists($item['country'], $target[$item['continent']])
$target[$item['continent']][$item['country']] = array();
//add city
if (!array_key_exists($item['city'], $target[$item['continent']][$item['country']])
$target[$item['continent']][$item['country']][$item['city']] = array();
//add the monument string to the city array
$target[$item['continent']][$item['country']][$item['city']][] = $item['monument'];
}
Any suggestions regarding creating the sub arrays or a more simple build of the array?
You may read your new array like this:
foreach ($target as $continent => $con_arr)
foreach ($con_arr as $country => $cou_arr)
foreach ($cou_arr as $city=> $cit_arr)
foreach ($cou_arr as $monument)
print $continent . $country . $city . $monument;
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.