11

我正在尝试完成为我的自定义 MVC 框架创建的 URL 路由器。我有一个从 URL 中剖析的参数列表,但问题是它们只有数字键。我想要做的是设置它,所以 $params 数组中的第一个值将是 KEY,然后数组中的第二个值是第一个 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 字符串中取出时,如果用“/”分隔符分解字符串,创建这种类型的数组会更容易吗?如果是这样,那么最好的功能是什么?

这可能是一个简单的解决方案,因为我确信这是一个常见问题,但有什么启示吗?

4

7 回答 7

11

也许array_splice()用于那个?

$result = array();

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

这将从 URL 列表中提取前两个条目,并将它们用作结果数组的键和值。重复,直到源列表为空。

于 2011-12-14T08:32:41.243 回答
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);
于 2011-12-14T08:34:08.670 回答
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];
}
于 2018-01-16T20:47:26.540 回答
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]);
            }
于 2017-04-19T10:44:33.913 回答
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',
  )
*/

在这里找到

于 2018-01-16T20:29:45.807 回答
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));
于 2020-09-28T09:32:12.850 回答
0
foreach($data as $key => $value) {
  if($key % 2 === 0) {
    $final_array[$value] = $data[$key + 1];
  }
}
于 2021-07-22T06:11:09.220 回答