2011-09-20 90 views
1

我有一个数组,看起来是这样的:如何重新分配数组键以变为关联数组?

array(
    0 => 'John', 
    1 => 'Smith', 
    3 => '123-456-7890' 
    4 => '[email protected]' 
) 

而且我想以编程方式更改键使阵列成为一个关联数组:

array(
    'first' => 'John', 
    'last' => 'Smith', 
    'phone' => '123-456-7890' 
    'email' => '[email protected]' 
) 

什么是最干净/最简洁的做法呢?

+0

是的,这个特定的数组只是一个循环的迭代。它会在每次迭代中被替换。 – Andrew

+0

实际上,我正在编写一个脚本来导入一个excel文档,其中的列可以以任何顺序排列,但不错的猜测! – Andrew

回答

5

array_combine()功能可能正是你要找的人:

$keys = array('first', 'last', 'phone', 'email'); 

$new_arr = array_combine($keys, $arr); 
+0

ooh ...这种方法的问题(我刚发现)是它需要两个数组具有相同数量的元素。我不知道values数组会有多久。我只需要将键分配给我知道会在那里的数据数组的前几项。 – Andrew

0

假设数组键是恒定的,使得0总是姓,1是姓,等...

$new_keys = array(0 => 'first', 1 => 'last', 3 => 'phone', 4 => 'email'); 

foreach($new_keys as $oldkey => $newkey) { 
    $orig_array[$newkey] = $orig_array[$oldkey]; 
    unset($orig_aray[$oldkey]); 
} 

如果映射不是恒定的,那么您必须每次动态创建$ new_keys数组,或者只需手动重新映射即可。

+0

我打算这样回答,但'array_combine'可能会更好。 –

+0

它会工作,但如果源数组中有其他键没有在新键列表中列出,它可能会有问题。 –

4

array_combine可能是这里的最佳方法。如果你有一个有序列表,你可以再次使用原始键合并它:

$array = array_combine(array("first", "last", "phone", "email"), $list);