开始我有两个PHP数组。
第一个数组的日期长度为Y-m
,其中包含12个月中的每个月份。这个数组看起来像这样......
Array
(
[0] => Array ( [ORDER] => Array ( [DATE] => 2008-10 [QTY] => 0 ) )
[1] => Array ( [ORDER] => Array ( [DATE] => 2008-11 [QTY] => 0 ) )
)
第二个数组具有从查询返回并放入数组的值,并且也是Y-m
的顺序,可能每月都有,也可能没有。第二个是这样的。
Array
(
[0] => Array ( [ORDER] => Array ( [DATE] => 2008-11 [QTY] => 285 ) )
[1] => Array ( [ORDER] => Array ( [DATE] => 2008-12 [QTY] => 900 ) )
)
我的最终目标是生成一个Y-m日期数组,用于谷歌折线图,如果在那个月没有订单放置,将显示0。所以这个数组应该是这样的..
Array
(
[0] => Array ( [ORDER] => Array ( [DATE] => 2008-10 [QTY] => 0 ) )
[1] => Array ( [ORDER] => Array ( [DATE] => 2008-11 [QTY] => 285 ) )
[2] => Array ( [ORDER] => Array ( [DATE] => 2008-12 [QTY] => 900 ) )
)
所以数组项......
[1] => Array ( [ORDER] => Array ( [DATE] => 2008-11 [QTY] => 0 ) )
。
现在我不确定我是否正确地走这条路,但到目前为止这就是我所拥有的。
foreach($FIRST_ARRAY as $key => $each)
{
foreach($each as $line)
{
$findMe = $line['DATE'];
if(in_array($findMe, $SECOND_ARRAY, true))
{
echo 'FOUND:'.$findMe;
}else{
echo $line['DATE'].' ';
echo $line['QTY'].' ';
echo '('.$findMe.')<br>';
}
}
}
所有这一切都是打印出First Array。这不是'匹配'日期。 这就是它的印刷品......
2008-10 0(2008-10) 2008-11 0(2008-11) 2008-12 0(2008-12)
这就是我想要打印出来的内容......
2008-10 0(2008-10) 2008-11 285(2008-11) 2008-12 900(2008-12)
问题是:我是否认为这一切都错了,或者是否有更好的方法。
我希望这一切都有道理。
答案 0 :(得分:1)
你可以尝试
$array = array(0 => array('DATE' => '2008-10','QTY' => 0),1 => array('DATE' => '2008-11','QTY' => 0));
$array2 = array(0 => array('DATE' => '2008-11','QTY' => 285),1 => array('DATE' => '2008-12','QTY' => 900));
$final = array();
groupAdd($final, $array, "DATE");
groupAdd($final, $array2, "DATE");
foreach ( $final as $line ) {
echo $line['DATE'] . ' ';
echo $line['QTY'] . ' ';
echo '(' . $line['DATE'] . ')<br>';
}
输出
2008-10 0 (2008-10)
2008-11 285 (2008-11)
2008-12 900 (2008-12)
使用的功能
function groupAdd(&$final, $array, $groupKey) {
foreach ( $array as $item ) {
isset($final[$item[$groupKey]]) ? $final[$item[$groupKey]]['QTY'] += $item['QTY'] : $final[$item[$groupKey]] = $item;
}
}
答案 1 :(得分:0)
$ans = Array();
$tmp_second_array = $SECOND_ARRAY;
foreach($FIRST_ARRAY as $key => $each){
$arr_to_add = $each;
if(!empty($tmp_second_array)){
foreach($tmp_second_array as $seckey => $seceach){
if($each['ORDER']['DATE'] === $seceach['ORDER']['DATE']){
$arr_to_add = $seceach;
unset($tmp_second_array[$seckey])
break;
}
}
$ans[] = $arr_to_add;
}
}
if(!empty($tmp_second_array)){
$ans = array_merge($ans, $tmp_second_array);
}