我正在尝试完成我为自定义MVC框架创建的URL路由器。我有一个从URL解析的参数列表,但问题是它们只有数字键。我想要做的是设置它,以便$ params数组中的第一个值是KEY,然后数组中的第二个值是第一个KEY的VALUE。但我需要更进一步。基本上,我需要数组中所有奇数键的值为新的KEY,偶数键的值为值。
示例:
这是当前设置的方式:
Array
(
[0] => greeting
[1] => hello
[2] => question
[3] => how-are-you
[4] => response
[5] => im-fine
)
这就是它需要的方式(转换后):
Array
(
[greeting] => hello
[question] => how-are-you
[response] => im-fine
)
当我从URL字符串中取出字符串后,当我用“/”分隔符分解字符串时,创建这种类型的数组会更容易吗?如果是这样,那最好的功能是什么?
这可能是一个简单的解决方案,因为我确信这是一个常见的问题,但是有任何启示吗?
答案 0 :(得分:8)
可能会使用array_splice()
吗?
$result = array();
while (count($urls)) {
list($key,$value) = array_splice($urls, 0, 2);
$result[$key] = $value;
}
这将从URL列表中提取前两个条目,并将其用作结果数组的键和值。重复,直到源列表为空。
答案 1 :(得分:1)
类似的东西:
$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);
答案 2 :(得分:0)
我不知道这是否是最佳解决方案,但我所做的是
$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]);
}
答案 3 :(得分:0)
最好的方法是将其分块并在列表中使用。
$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',
)
*/
答案 4 :(得分:0)
只是因为没有其他人指出它,这是有效的,并且至少与内置的性能函数一样好:
$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];
}
答案 5 :(得分:0)
我们都在寻找一线客:
array_combine(array_filter($urls, function ($k) {return !($k&1);}, ARRAY_FILTER_USE_KEY), array_filter($urls, function ($k) {return ($k&1);}, ARRAY_FILTER_USE_KEY));
答案 6 :(得分:0)
foreach($data as $key => $value) {
if($key % 2 === 0) {
$final_array[$value] = $data[$key + 1];
}
}