2011-06-08 62 views
1

我有以下數組的鍵和值。我如何重新創建這個數組,使第二列作爲關鍵字和第三列的值。同時刪除所有不需要的間距。php重新創建一個數組到新的鍵和值

Array 
(
    [16] =>  hasKeyframes : true 
    [17] =>  hasMetadata  : true 
    [18] =>  duration  : 30 
    [19] =>  audiosamplerate : 22000 
    [20] =>  audiodatarate : 68 
    [21] =>  datasize  : 1103197 
} 

新數組應該看起來像這樣。

Array 
(
    [hasKeyframes] => true 
    [hasMetadata] => true 
    ... 
} 
+0

只是循環並將新的鍵和值分配給一個新的數組 – Ibu 2011-06-08 08:00:55

+0

你現在如何存儲鍵和值?他們在兩個單獨的陣列?你能提供實際的PHP代碼嗎? – MGwynne 2011-06-08 08:03:01

+0

@冷夏威夷它是ffmpeg的輸出,如果我沒有記錯的話 – 2011-06-08 08:06:05

回答

4
$newArray=array(); 
foreach($array as $value) 
{ 
    $pair=explode(":",$value); 
    $newArray[trim($pair[0])] = trim($pair[1]); 
} 

編輯

如果我們有像[19] => 時間:00:00:31.03,那麼我們只 得到00 $對[1]

$newArray=array(); 
foreach($array as $value) 
{ 
    $pair=explode(":",$value,2); 
    $newArray[trim($pair[0])] = trim($pair[1]); 
} 
+0

謝謝@shakti,這個工作,但如果我們有類似於[[19] =>持續時間:00:00:31.03'的話,那麼我們只能得到00'$ pair [1]' – Pinkie 2011-06-08 08:10:42

+2

@Pinkie使用第三個參數爆炸功能,而不是在爆炸中增加一個空間:'$ pair = explode(「:」,$ value,2);' – 2011-06-08 08:21:59

+0

@Carlos:是的,我在編輯我的答案。 – 2011-06-08 08:25:18

1

我的解決方案採用array_walk(),並且從PHP 5.3開始工作,因爲使用了匿名函數。

$array=array(/* ORIGINAL ARRAY */); 
$newarray=array(); 

array_walk($array, function ($v, $k) use (&$newarray) { 
    $pos=strpos($v, ':'); 
    $newkey=substr($v, 0, $pos); 
    $newvalue=substr($v, $pos+1); 
    $newarray[$newkey]=$newvalue; 
}); 
相關問題