2010-11-29 96 views
0

我試圖用兩個數組的信息創建表。這裏有兩個陣列:重新索引並根據另一個陣列填充陣列

第一陣列,表頭

Array 
(
    [0] => Color 
    [1] => Length 
    [2] => Waist 
) 

第二陣列,即需要修改

Array 
(
    [0] => Array 
     [0] => green [1] => Color 

    [1] => Array 
     [0] => 23 [1] => Length 
) 
Array 
(
    [0] => 
) 
Array 
(
    [0] => Array 
     [0] => 23 [1] => Length 

    [1] => Array 
     [0] => 24 [1] => Waist 
)  

陣列需要像這樣的一個:

Array 
(
    [0] => Array 
     [0] => green [1] => Color 

    [1] => Array 
     [0] => 23 [1] => Length 

    [2] => Array 
     [0] => [1] => Waist 

Array 
(
    [0] => Array 
     [0] => [1] => Color 

    [1] => Array 
     [0] => [1] => Length 

    [2] => Array 
     [0] => [1] => Waist 

Array 
(
    [0] => Array 
     [0] => [1] => Color 

    [1] => Array 
     [0] => 23 [1] => Length 

    [2] => Array 
     [0] => 24 [1] => Waist 

所以問題是第一級中的鍵需要匹配數組中的鍵ma kes表頭,其中[1]第二級與表頭具有相同的值。有任何想法嗎?

+0

這很難弄清楚你的問題。你需要重新格式化數組嗎?你能不能改變生成它們的腳本以適當的格式給出數組? – Stephen 2010-11-29 22:47:37

+0

數字鍵的順序很重要嗎? – Stephen 2010-11-29 22:51:18

回答

2

你有一個複雜的陣列結構一個簡單的集合數據。你的最終陣列能夠像這樣更好地工作嗎?

$data = array(
    array(
     'Color' => 'green', 
     'Length' => 23, 
     'Waist' => NULL 
    ), 
    array(
     'Color' => NULL, 
     'Length' => NULL, 
     'Waist' => NULL 
    ), 
    array(
     'Color' => NULL, 
     'Length' => 23, 
     'Waist' => 24 
    ) 
); 

如果你對你的結構死心塌地,不過,這應該工作:

function format_my_array($keys, $malformed) { 
    foreach ($malformed as $key => $fragments) { 
     $temp = array(
      'Color' => NULL, 
      'Length' => NULL, 
      'Waist' => NULL 
     ); 
     foreach ($fragments as $fragment) { 
      if (isset($fragment[1])) { 
       switch($fragment[1]) { 
        case 'Length': 
         $temp['Length'] = $fragment[1]; 
         break; 
        case 'Waist': 
         $temp['Waist'] = $fragment[1]; 
         break; 
        default: 
         $temp['Color'] = $fragment[1]; 
         break; 
       } 
      } 
     } 
     $malformed[$key] = array(
      array($temp['Color'], 'Color'), 
      array($temp['Length'], 'Length'), 
      array($temp['Waist'], 'Waist') 
     ); 
    } 
    return $malformed; 
}