2015-10-10 49 views
-1

我試圖通過組合兩個數組來生成報告。組合相關數組用於在PHP中生成報告

我的第一個數組:

echo json_encode($arr_default); 
[ 
    {"01":"0"},{"01":"0"},{"01":"0"},{"01":"0"},{"01":"0"} 
    ,{"02":"0"},{"02":"0"},{"02":"0"},{"02":"0"},{"02":"0"} 
    ,{"03":"0"},{"03":"0"},{"03":"0"},{"03":"0"},{"03":"0"} 
    ,{"04":"0"},{"04":"0"},{"04":"0"},{"04":"0"},{"04":"0"} 
    ,{"05":"0"},{"05":"0"},{"05":"0"},{"05":"0"},{"05":"0"} 
    ,{"06":"0"},{"06":"0"},{"06":"0"},{"06":"0"},{"06":"0"} 
    ,{"07":"0"},{"07":"0"},{"07":"0"},{"07":"0"},{"07":"0"} 
    ,{"08":"0"},{"08":"0"},{"08":"0"},{"08":"0"},{"08":"0"} 
    ,{"09":"0"},{"09":"0"},{"09":"0"},{"09":"0"},{"09":"0"} 
    ,{"10":"0"},{"10":"0"},{"10":"0"},{"10":"0"},{"10":"0"} 
    ,{"11":"0"},{"11":"0"},{"11":"0"},{"11":"0"},{"11":"0"} 
    ,{"12":"0"},{"12":"0"},{"12":"0"},{"12":"0"},{"12":"0"} 
] 

我的第二個數組:

echo json_encode($arr_data); 
//[ 
    {"01":"11.600"},{"01":"0"},{"01":"0"},{"01":"11.600"},{"01":"11.600"} 
    ,{"02":"6.133"},{"02":"6.133"},{"02":"0"},{"02":"0"},{"02":"6.133"} 
    ,{"03":"0"},{"03":"0"},{"03":"0"},{"03":"0"},{"03":"14.667"} 
] 

這是到目前爲止我的代碼,但結果是不正確的:

$arr_final = array(); 
foreach($arr_default as $dt_arr_default) 
{ 
    $found=false; 
    foreach($arr_data as $dt_arr_data) 
     { 
      if(key($dt_arr_default)==key($dt_arr_data)) 
      { 
       $arr_final[] = $dt_arr_data; 

       $found=true; 
       break; 
      } 
    } 
      if(!$found) 
      { $arr_final[]=$dt_arr_data; } 
} 

我的代碼結果:

[ 
    {"01":"11.6"},{"01":"11.6"},{"01":"11.6"},{"01":"11.6"},{"01":"11.6"} 
    ,{"02":"6.1"},{"02":"6.1"},{"02":"6.1"},{"02":"6.1"},{"02":"6.1"} 
    ,{"03":"0"},{"03":"0"},{"03":"0"},{"03":"0"},{"03":"0"} 
    ,{"04":"0"},{"04":"0"},{"04":"0"},{"04":"0"},{"04":"0"} 
    ,{"05":"0"},{"05":"0"},{"05":"0"},{"05":"0"},{"05":"0"} 
    ,{"06":"0"},{"06":"0"},{"06":"0"},{"06":"0"},{"06":"0"} 
    ,{"07":"0"},{"07":"0"},{"07":"0"},{"07":"0"},{"07":"0"} 
    ,{"08":"0"},{"08":"0"},{"08":"0"},{"08":"0"},{"08":"0"} 
    ,{"09":"0"},{"09":"0"},{"09":"0"},{"09":"0"},{"09":"0"} 
    ,{"10":"0"},{"10":"0"},{"10":"0"},{"10":"0"},{"10":"0"} 
    ,{"11":"0"},{"11":"0"},{"11":"0"},{"11":"0"},{"11":"0"} 
    ,{"12":"0"},{"12":"0"},{"12":"0"},{"12":"0"},{"12":"0"} 
] 

結果我想:

[ 
    {"01":"11.6"},{"01":"0"},{"01":"0"},{"01":"11.6"},{"01":"11.6"} 
    ,"02":"6.1"},"02":"6.1"},{"02":"0"},{"02":"0"},{"02":"6.133"},  
    {"03":"0"},{"03":"0"},{"03":"0"},{"03":"0"},{"03":"14.6"} 
    ,{"04":"0"},{"04":"0"},{"04":"0"},{"04":"0"},{"04":"0"} 
    ,{"05":"0"},{"05":"0"},{"05":"0"},{"05":"0"},{"05":"0"} 
    ,{"06":"0"},{"06":"0"},{"06":"0"},{"06":"0"},{"06":"0"} 
    ,{"07":"0"},{"07":"0"},{"07":"0"},{"07":"0"},{"07":"0"} 
    ,{"08":"0"},{"08":"0"},{"08":"0"},{"08":"0"},{"08":"0"} 
    ,{"09":"0"},{"09":"0"},{"09":"0"},{"09":"0"},{"09":"0"} 
    ,{"10":"0"},{"10":"0"},{"10":"0"},{"10":"0"},{"10":"0"} 
    ,{"11":"0"},{"11":"0"},{"11":"0"},{"11":"0"},{"11":"0"} 
    ,{"12":"0"},{"12":"0"},{"12":"0"},{"12":"0"},{"12":"0"} 
] 

,最後我怎麼能的foreach數組是這樣的:

01 11.6 0  0 11.6 11.6 
02 6.1 6.1 0 0  6.1 
03 0  0  0 0  14.6 
04 0  0  0 0  0 
05 0  0  0 0  0 
06 0  0  0 0  0 
07 0  0  0 0  0 
08 0  0  0 0  0 
09 0  0  0 0  0 
10 0  0  0 0  0 
11 0  0  0 0  0 
12 0  0  0 0  0 

謝謝您的幫助!

+0

_How_你要結合您的陣列? – Federkun

+0

你想用這兩個物體做什麼?合併重複項,不重複,合併並組合成具有唯一鍵的數組?按順序組合和排序?添加更多你想要的東西的描述。或者,如果您想創意並嘗試自己,請查看Lo-dash或Underscore庫:https://lodash.com/docs。 –

+0

@federico任何方法都可以。但我更喜歡更簡單的一個。最重要的是匹配我想要的結果。 – ashura91

回答

0

您應該以更容易使用的格式轉換該數組。

// Only if you are using php < 5.5 
if(!function_exists("array_column")) { 
    function array_column($array, $column_name) { 
     return array_map(function ($e) use ($column_name) { return $e[$column_name]; }, array_filter($array, function($item) use ($column_name) { 
      return isset($item[$column_name]); 
     })); 
    } 
} 

$keys = []; 
foreach ($first_array as $data) { 
    $keys[] = key($data); 
}; 

$results = array_fill_keys($keys, array()); 
array_walk($results, function(&$item, $key) use ($first_array, $second_array) { 
    $item = array_replace(array_column($first_array, $key), array_column($second_array, $key)); 
}); 

您可以使用$results來遍歷數組,像這樣:

foreach ($results as $name => $result) { 
    echo $name, ' ', implode(' ', $result), "\n"; 
} 

併爲你想要的格式重新創建的結果,

$newResults = []; 
foreach ($results as $name => $result) { 
    foreach ($result as $data) { 
     $newResults[][$name] = $data; 
    } 
} 

Demo

+0

致命錯誤:調用未定義函數array_column() – ashura91

+0

我使用解決方法進行編輯,看看是否有更清晰的解決方案 – Federkun

+0

@ ashura91,現在檢查它。 – Federkun

0

如果你組織你的第一個數組這樣

$arr_default = array(
    "01"=>array("0","0","0","0","0") 
    ,"02"=>array("0","0","0","0","0") 
    ,"03"=>array("0","0","0","0","0") 
    ,"04"=>array("0","0","0","0","0") 
    ,"05"=>array("0","0","0","0","0") 
    ,"06"=>array("0","0","0","0","0") 
    ,"07"=>array("0","0","0","0","0") 
    ,"08"=>array("0","0","0","0","0") 
    ,"09"=>array("0","0","0","0","0") 
    ,"10"=>array("0","0","0","0","0") 
    ,"11"=>array("0","0","0","0","0") 
    ,"12"=>array("0","0","0","0","0") 
); 

而第二個這樣的

$arr_data = array(
    "01"=> array("11.600","0","0","11.600","11.600") 
    "02"=>,array("6.133","6.133","0","0","6.133") 
    "03"=>,array("0","0","0","0","14.667") 
); 

你可以採取類似鑰匙的優勢:

foreach($arr_data as $key=>$replaceWith) { 
    $arr_default[$key] = $replaceWith; 
} 

然後打印那陣你簡直就是

foreach($arr_default as $key=>$arr) { 
    echo $key . "\t" . implode("\t",$arr); 
} 

您可以將\ t更改爲您想要的任何位置。因此,要建立一個實際的HTML表:

echo "<table>"; 
foreach($arr_default as $key=>$arr) { 
    echo " 
    <tr> 
     <td>" . $key . "</td><td>" . implode("</td><td>",$arr) ."</td> 
    </tr>"; 
} 
echo "</table>"; 

要將當前陣列轉換爲該多維格式:

$new_arr_data = array(); 
foreach($arr_data as $pai) { 
    list($key,$value) = $pair; 

    $new_arr_data[$key][] = $value; 
} 
$arr_data = $new_arr_data; 
+0

謝謝你的回覆@Terminus。 – ashura91