2011-08-22 70 views
0

我怎样才能创建一个使用下面的数组,在最快和最短方式的关联数组。如何在php中使用2维数组创建关联数组?

$list = array(array('name', 'aram'), array('family', 'alipoor')); 

喜欢的东西:

$list = array('name' => 'aram', 'family' => 'alipoor'); 
+0

是否可以安全地假设你没有遇到任何速度问题?另外:你如何衡量最快和最短?不是最快的总是最短的?或者是最短的代码组成的字符数? – hakre

+0

在我的情况下,最快意味着写入速度最快(字符),速度并不重要。 –

+0

请记住,代码经常被读取比写入更多,所以如果您打开了一个建议,则应该更加注意代码很容易(快速)阅读,而不是快速输入。 – hakre

回答

2

我能想到的最短:

$newlist = array(); 
foreach ($list as $keyval) { 
    $newlist[ $keyval[0] ] = $keyval[1]; 
} 
+0

如果没有任何循环,它会最短。是不是有任何方法可以在使用php函数的单行中做到这一点 –

+0

定义长度的初始数组?否则,你必须有一个循环。 – Rijk

3
$assocArray = array(); 

foreach($list as $subArray) 
{ 
    $assocArray[$subArray[0]] = $subArray[1]; 
} 
0

可怕的做法,但

$lst = array_combine(array_map('array_shift',$list), array_map('array_pop',$list)); 

工程只有两元素内阵列。

说明:在这个解决方案中的隐式循环。所以更好地使用Rijk van Wel或kevinmajor1的方法回答

0

我通常认为foreach的可读性非常好,而且通常非常快。如果你想在一个行,可以用foreach做的一样好:

$nl = array(); foreach($list as $k=>$v) $nl[$k]=$v; $list = $nl; unset($nl); 

这基本上表明存在得到的东西“单行”没有价值。

或者如果你喜欢回调出于某种原因,我不知道的:

$list = array_reduce($list, function($v,$w) {return $v+array($w[0]=>$w[1]);}, array()); 

这表明这一点。它不会比以前更快,无论如何,速度差异在你的情况下肯定不重要。