0

一开始我有两个 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 ) )
)   

我的最终目标是生成一个 Ym 日期数组,用于谷歌折线图,如果该月没有下订单,它将显示 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>';
                }
    }
}

所有这些都是打印出第一个数组。这不是“匹配”日期。这是它的打印内容...

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)

问题将是:我是否将这一切都错了,或者是否有更好的方法来做到这一点。

我希望这一切都有意义。

4

2 回答 2

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'] . '&nbsp;';
    echo $line['QTY'] . '&nbsp;';
    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;
    }
}
于 2012-10-12T15:38:12.757 回答
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);
}
于 2012-10-12T15:36:25.713 回答