将数组排序为关联数组,奇数值作为键

Dan*_*ugg 4 php arrays associative-array

很简单:

// turn
array('foo', 'bar', 'hello', 'world');

// into
array('foo' => 'bar', 'hello' => 'world');
Run Code Online (Sandbox Code Playgroud)

现在我正在使用:

do{
    $arrayOut[current($arrayIn)] = next($arrayIn);
}while(next($arrayIn));
Run Code Online (Sandbox Code Playgroud)

我想知道如果没有中间变量,有没有办法做到这一点,$arrayOut.我可以写一个函数,但这只是一个用例,我试图保持我的脚本整洁.我只是想知道在文档中是否遗漏了一些可以达到此目的的东西.


值来自路由路径:

route/to/controller/action/key1/value1/key2/value2
Run Code Online (Sandbox Code Playgroud)

它爆炸了,最后在使用其他组件后,我就离开了 ('key1', 'value1', 'key2', 'value2', ...)


感谢大家的见解和建议.Long Ears以简洁的方式赢得了这个,当扩展到超过"1线"时,并不是非常神秘(我至少不认为)

然而,同样关于Long Ears的建议,也许我对语义精确的代码的渴望最小化了我的好处,而我正在追逐雏菊试图保持我的变量范围"无污染",用自己来解释.

Lon*_*ars 5

您可以使现有代码更有效(每次迭代删除一个函数调用,开头一个:)

$b = array();
array_unshift($a, false);
while (false !== $key = next($a)) {
    $b[$key] = next($a);
}
Run Code Online (Sandbox Code Playgroud)

好的,(颤抖)这是你的一个班轮:

$b = call_user_func_array('array_merge', array_map(function($v) { return array($v[0] => $v[1]); }, array_chunk($a, 2)));
Run Code Online (Sandbox Code Playgroud)

  • @Tomcat我会说intellisense太挑剔了,如果它会引发某种警告.作为编码员,您的首要责任是使您的代码易于理解.偶尔会与您的第二个责任冲突 - 使您的代码有效.然而,这些都不应该因为(可论证的)美学而受到损害. (2认同)