2015-10-10 54 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