2013-12-13 50 views
0

我有以下陣列:拆分陣列值,並把它作爲重點

Array 
(
    [0] => 102 [30:27] 
    [1] => 110 [29:28] 
    [2] => 103 [30:27] 
) 

我需要的輸出如下:

Array 
(
    [102] => 30:27 
    [110] => 29:28 
    [103] => 30:27 
) 

我怎樣才能做到這一點?

+2

是'102 [30:27]''[0]'鍵的值還是你在這裏寫的解釋?你可以使用'array_flip()'數組函數在php – Roopendra

+0

中調用數組值。但是我需要的不是翻轉,我想要的是從第一個數組中取出鍵並將值作爲鍵和值示例,[ 0] => 102 [30:27]並更改爲[102] => 30:27 ...現在清楚了嗎? –

回答

1

如果數據是一致的,那麼是否需要昂貴的正則表達式?這是working version

$array = array(
    '102 [30:27]', 
    '110 [29:28]', 
    '103 [30:27]' 
); 

$new = array(); 

array_walk($array, function($element) use (&$new) { 
    $parts = explode(" ", $element); 
    $new[$parts[0]] = trim($parts[1], ' []'); 
}); 

var_dump($new); 
+0

這是絕對完美的答案,謝謝。 –

0

嘗試

$new_arr=array(); 


foreach($b as $k=>$v) 
{ 
    $v=explode(' ',$v); 
    //var_dump($v); 
    $v[1]=str_replace(array('[',']'),array('',''),$v[1]); 
    $new_arr[$v[0]]=$v[1]; 
} 

print_r($new_arr); 

輸出:

Array ([102] => 30:27 [110] => 29:28 [103] => 30:27) 
1

您可以通過數組循環,使用正則表達式來捕獲的數量和價值,然後建立與新的數組號碼作爲索引:

$result = array(); 

foreach ($array as $key => $value) { 
    if (preg_match('~(\d+)\s+\[(.*)]~', $value, $matches)) { 
     $index = isset($matches[1]) ? $matches[1] : $key; 
     $value = isset($matches[2]) ? $matches[2] : $key; 
     $result[$index] = $value; 
    } 
} 

print_r($result); 

Demo.


如果數組值始終由單個空格分隔,則不需要正則表達式。你可以使用explode()到數組值與空間分隔符拆分,然後拿到指標和價值來構建新的數組:

$result = array(); 

foreach ($array as $key => & $value) { 
    $parts = explode(' ', $value); 
    $index = $parts[0]; 
    $result[$index] = substr($parts[1], 1, -1); 
} 

print_r($result); 

輸出:

Array 
(
    [102] => 30:27 
    [110] => 29:28 
    [103] => 30:27 
) 

Demo.