Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Reorganizing an array: odd entries as KEY, even entries as VALUE

I'm trying to finish up a URL router that I created for my custom MVC framework. I have a list of parameters that I dissected from the URL, but the problem is that they only have numerical keys. What I want to do is set it up so the first value in the $params array will be the KEY and then the second value in the array is the VALUE of the first KEY. But I need to take it beyond that even further. Essentially, I need all odd number key's value in the array to be the new KEY and the even number key's value to be the value.

Example:

This is how it's CURRENTLY set up:

Array
(
  [0] => greeting
  [1] => hello
  [2] => question
  [3] => how-are-you
  [4] => response
  [5] => im-fine
)

This is how it NEEDS to be (after conversion):

Array
(
  [greeting] => hello
  [question] => how-are-you
  [response] => im-fine
)

Would it be easier to create this type of array when I explode the string by the '/' delimiter when I'm taking it out of the URL string? If so, what would be the best function for that?

It's probably a simple solution, because I'm sure this is a common issue, but any enlightenment?

like image 733
cshoffie Avatar asked Dec 14 '11 08:12

cshoffie


2 Answers

Maybe use array_splice() for that?

$result = array();

while (count($urls)) {
    list($key,$value) = array_splice($urls, 0, 2);
    $result[$key] = $value;
}

This will extract the first two entries from the URL list and use those as key and value for the resulting array. Repeats, until the source list is empty.

like image 61
Linus Kleen Avatar answered Oct 23 '22 13:10

Linus Kleen


Something like:

$data = array (
  'greeting',
  'hello',
  'question',
  'how-are-you',
  'response',
  'im-fine',
);

$new = array();

for ($i = 0, $lim = sizeof($data); $i < $lim; $i += 2) {
  $new[$data[$i]] = isset($data[$i + 1]) ? $data[$i + 1] : null;
}

print_r($new);
like image 1
Yoshi Avatar answered Oct 23 '22 13:10

Yoshi