2012-06-12 16 views
3

我想如果能夠找出循環一個數組中的foreach循環,循環的結果應作爲新的陣列,像這樣的鍵,把foreach循環結果作爲關鍵PHP

$names = array('joe', 'piter', 'jack'); 
$dates = array('06/22/1987', '05/25/1988', '08/26/1990'); 
$arr = array(); 
foreach($names as $v){ 
    $arr[] = $v; 
} 
$arr2 = array($arr => $dates); 
print_r($arr2); 

我該怎麼做?

Thnaks guys。

+0

在這種情況下期望的輸出是什麼? – Niko

+3

我想你可能正在尋找[array_combine](http://www.php.net/manual/en/function.array-combine.php)。它需要2個數組並創建一個新的數組,其中的鍵來自一個數組,而另一個則來自這些數值。 – drew010

回答

6

不需要foreach循環來實現這一點。只需使用array_combine

$names = array('joe', 'piter', 'jack'); 
$dates = array('06/22/1987', '05/25/1988', '08/26/1990'); 
$arr2 = array_combine($names, $dates); 

print_r($arr2)輸出:

 
Array 
(
    [joe] => 06/22/1987 
    [piter] => 05/25/1988 
    [jack] => 08/26/1990 
) 

在這種情況下,你不需要做這個,但如果你想知道如何使用$v作爲鍵$arr2您循環你可以做的任務在循環:

$arr2[$v] = ...; 
+0

但是,如果我希望每個鍵應該是一個數組,我該怎麼做? – thegrede

+2

@thegrede你不能使用'數組'作爲鍵。密鑰必須是字符串或整數。看到這裏:http://php.net/manual/en/language.types.array.php。如果你真的希望你可以用'serialize'將數組轉換爲一個字符串,然後用它作爲一個鍵,但我強烈建議不要這樣做。 – Paulpro

+1

@ ascii-lime通過擴展ArrayObject並覆蓋OffsetSet方法,通過實現ArratAccess並實現您自己的OffsetSet方法,並使用SplObserver/SplSubject接口,可以使用對象作爲數組鍵。 –

2

嗯,看到了@ ASCII鈣的回答(這是好多了)之後我打這件事,但正如另一種我猜...

$names = array('joe', 'piter', 'jack'); 
$dates = array('06/22/1987', '05/25/1988', '08/26/1990'); 
$arr = array(); 
$i=0; 
foreach($names as $v){ 
    $arr[$v] = $dates[$i]; 
    ++$i; 
} 
print_r($arr);