2014-04-04 43 views
1

美好的一天我有一個包含逗號分隔的數據數組:在PHP創建一個從現有陣列新數組

array (
     [0]=>Jack,140101d,10 
     [1]=>Jack,140101a,15 
     [2]=>Jack,140101n,20 
     [3]=>Jane,141212d,20 
     [4]=>Jane,141212a,25 
     [5]=>Jane,141212n,30 
    ) 

有大量的數據,我想對數據進行列示:

array(
     [Jack]=> 
      [140101] 
       =>[d] =>10 
       =>[a] =>15 
       =>[n] =>20 
    ) 

我的代碼:

  foreach ($out as $datavalue) { 
        $dat = str_getcsv($datavalue,','); 
        $datevalue = substr($dat[1],2,-1); 
        $shiftvalue = substr($dat[1],-1); 
        $totalvalue = $dat[2]; 
        $sval[$shiftvalue] = $totalvalue; 
        $dval[$datevalue] = $sval; 
        $opvalue = $dat[0]; 
        $final[$opvalue] = $dval; 
      } 

現在看來陣列填充即使沒有從數據或原始字符串,所以我的輸出顯示傑克在其他日期的結果,即使最初沒有他的數據。希望這是有道理的。任何人都可以指出或建議一個解決方案嗎?

+0

你應該看看['爆炸()'](http://www.php.net/explode) – Darren

+1

http://codepad.viper-7.com/Y7sT3N – billyonecan

+0

@billyonecan不錯! –

回答

1

正如評論中提到的,explode是你所需要的。見this working here

<?php 

$input = array (
    0 => 'Jack,140101d,10', 
    1 => 'Jack,140101a,15', 
    2 => 'Jack,140101n,20', 
    3 => 'Jane,141212d,20', 
    4 => 'Jane,141212a,25', 
    5 => 'Jane,141212n,30', 
); 

$result = array(); 

foreach ($input as $key => $value) { 
    $valueParts = explode(',',$value); // now valueparts is an array like ('Jack','140101d','10') 
    $namePart  = $valueParts[0]; 
    $idPart = substr($valueParts[1],0,-1); // we need to strip the letter from the id 
    $charPart  = substr($valueParts[1],-1); // and the id from the letter 
    $nrPart = $valueParts[2]; // you could use intval() to make this an integer rather than a string if you want 

    // Now we fill the array 
    if(!array_key_exists($namePart, $result)) { 
    $result[$namePart] = array(); 
    } 
    if(!array_key_exists($idPart, $result[$namePart])) { 
    $result[$namePart][$idPart] = array(); 
    } 
    if(!array_key_exists($charPart, $result[$namePart][$idPart])) { 
    $result[$namePart][$idPart][$charPart] = $nrPart; 
    } 
} 

var_dump($result);