2012-06-12 17 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);