2012-11-01 38 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] =>巴)

相關問題