问题
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?
回答1:
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.
回答2:
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);
回答3:
I don't know if it the best solution but what I did is
$previousElement = null;
foreach ($features as $key => $feature) {
//check if key is even, otherwise it's odd
if ($key % 2 === 0) {
$features[$feature] = $feature;
} else {
$features[$previousElement] = $feature;
}
//saving element so I can "remember" it in next loop
$previousElement = $feature;
unset($features[$key]);
}
回答4:
The best way to do it is with chunking it and using it in list.
$array = array("greeting", "hello", "question", "how-are-you", "response", "im-fine");
$assoc = array();
foreach (array_chunk($array, 2) as $pair) {
list($key, $value) = $pair;
$assoc[$key] = $value;
}
var_export($assoc);
/*
array (
'greeting' => 'hello',
'question' => 'how-are-you',
'response' => 'im-fine',
)
*/
found here
回答5:
just because no one else has pointed it out, this works and is at least as good as the built in functions for performance:
$array = array("greeting", "hello", "question", "how-are-you", "response", "im-fine");
$res = array();
for($i=0; $i < count($array); $i+=2){
$res[$array[$i]] = $array[$i+1];
}
来源:https://stackoverflow.com/questions/8501422/reorganizing-an-array-odd-entries-as-key-even-entries-as-value