2014-02-10 70 views
0

我有一個數組有兩個值,像((id, value), (id, value), (id, value))和我需要做的數組像id => value,所以我想知道是否有一些函數在這種工作的PHP或我需要寫我自己的。只是不想推倒重來....是否有從其他數組值創建assoc數組的函數?

UPDATE

array(2) { 
    [0]=> 
    array(2) { 
    ["site_id"]=> 
    string(3) "12" 
    ["timestamp"]=> 
    string(19) "2014-01-09 08:48:40" 
    } 
    [1]=> 
    array(2) { 
    ["site_id"]=> 
    string(3) "13" 
    ["timestamp"]=> 
    string(19) "2014-02-07 14:27:57" 
    } 
} 
+1

'array_map' +'array_combine' – zerkms

+0

最直接的方式是環這裏。沒有哪個函數確實可以這樣做,並且將幾個函數結合起來不會像簡單的循環那樣高效。 – deceze

回答

6

了一些用PHP HOFs,只是爲了好玩:

$data = array(
    array('foo', 'bar'), 
    array('baz', '42'), 
); 

$ithIx = function($ix) { 
    return function($item) use($ix) { 
     return $item[$ix]; 
    }; 
}; 

$combined = array_combine(
    array_map($ithIx(0), $data), 
    array_map($ithIx(1), $data) 
); 

var_dump($combined); 

在線演示:http://ideone.com/jIsgpL

對於那些看不到功能風格美的人 - 這裏有些無聊foreach

$combined = array(); 
foreach ($data as $val) { 
    $combined[$val[0]] = $val[1]; 
} 
+0

功能組成的好展示。雖然我不會說這是最實際的解決方案...;) – deceze

+0

@deceze:這就是爲什麼只是爲了好玩:-) – zerkms

+0

太多的循環在這裏... – Kin

1

另一種解決方案(半鏜):

$a = array(
    array(1, 'Hello'), 
    array(2, 'World') 
); 

$a = array_combine(array_column($a, 0), array_column($a, 1)); 

(如果PHP < 5.5)

function array_column($array, $column) 
{ 
    return array_map(function($e) use ($column) {return $e[$column];}, $array); 
}