1

I have some filters:

$filters = array('rooms-4-5', 'city-london-berlin-paris'); 

and I wanna create a array like this:

array( 'rooms' => array('4', '5'), 'city' => array('london', 'berlin', 'paris') ); 

I tried:

 foreach($filters as $filter): $filter = explode('-', $filter); $data[$filter[0]] = array(); array_shift($filter); foreach($filter as $value): //here I am stuck ... endforeach; endforeach; 

1 Answer 1

5

You seem to have been fairly close, except for that fact that you already have the array elements in $filter and you only needed to remove the first variable (by using array_shift()) and insert it.

The thing is that array_shift() (link to documentation) returns the removed value so you can store that in the array and use it for the key. And the array after shifting is ready to be used.

Here's the full result:

<?php $filters = array('rooms-4-5', 'city-london-berlin-paris'); $out = array(); foreach($filters as $filter) { $filter_exploded = explode('-',$filter); $val = array_shift($filter_exploded); // remove first element, add it to the variable $out[$val] = $filter_exploded; } var_dump($out); 
Sign up to request clarification or add additional context in comments.

2 Comments

Yeah you are right, I was in a mind loop and can't figured out. Maybe some sleep will help. System will allow me to accept as answer in 5 minutes. Thank you.
You can't. However you build these arrays, you'll have to change the dash with something else. So either the dash of the city name or the dash that separates all the elements. If you can build it like city_london_berlin_paris, it would probably be better since no city will have an underscore :)

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.