2012-11-01 39 views

回答

4

为了存储效率,并减少计算。

如果$ input数组的值为奇数个,则最后一个值为NULL。

$result = array(); 

while (count($input)) { 
    $result[array_shift($input)] = array_shift($input); 
} 
+0

接受这个答案,因为它似乎最“优雅”,虽然所有的答案是真的有帮助!非常感谢! – errata

1

我会用一个简单的启动关闭循环

$arr = array(
'x', 
'foo', 
'y', 
'bar' 
); 

$result = array(); 
$end = count($arr); 
for ($i = 0; $i+1 < $end; $i+=2) { 
    $result[$arr[$i]] = $arr[$i+1]; 
} 

var_dump($result); 

输出:

array(2) { 
    ["x"]=> string(3) "foo" 
    ["y"]=> string(3) "bar" 
} 
+0

勘误应该注意,这假定密钥总是随后的值。 – Jaime

+0

是的,那是真的。我会更新我的帖子。 – errata

2

我不知道如何有效的,这是,但是:

$newArray = array(); 
foreach(array_chunk($array, 2) as $keyVal){ 
    list($key, $val) = $keyVal; 
    $newArray[$key] = $val; 
} 

DEMO:http://codepad.org/VF8qHAhQ

1

假设你想要的键/值对要在每一个/其他的模式,你可以使用:

$data = array('x', 'foo', 'y', 'bar', 'z'); 
$new = array(); 

$end = count($data); 
for ($i = 0; $i < $end; $i += 2) { 
    $new[$data[$i]] = (isset($data[$i + 1]) ? $data[$i + 1] : ''); 
} 

print_r($new); 

会给:

Array 
(
    [x] => foo 
    [y] => bar 
    [z] => 
) 

这将通过您的数据的列表迭代和设置第一个值作为键,下一个作为值。如果没有“下一个”值(即 - 原始数组中不能被2整除的最后一项),则为空。

这种方法的缺陷是,如果同一个“钥匙”被看到不止一次,它将被覆盖。这可以通过添加if (isset($new[$data[$i]])) continue;作为循环的第一行来绕开。

1

如何:

$data = array('x','foo','y','bar'); 
$i = 0; 
$n = count($data) 
$newData = array(); 
while($i < $n) { 
    $newData[$data[$i]] = $data[++$i]; 
} 
2
$ar = Array("x","foo","y","bar"); 

$assoc = Array(); 

for($i=0;$i<count($ar);$i+=2){$assoc[$ar[$i]]=$ar[$i+1];} 

print_r($assoc); 

输出:阵列([X] => FOO [Y] =>巴)

相关问题