0

まず、2 つの PHP 配列があります。

Y-m最初の配列には、12 か月ごとに年が含まれる順序で日付の長さが含まれています。この配列は次のようになります...

Array
( 
    [0] => Array ( [ORDER] => Array ( [DATE] => 2008-10 [QTY] => 0 ) ) 
    [1] => Array ( [ORDER] => Array ( [DATE] => 2008-11 [QTY] => 0 ) ) 
)

2 番目の配列には、クエリから返されて配列に入れられた値が含まれており、Y-m各月が含まれている場合と含まれていない場合があります。2枚目はこんな感じ。

Array
(
    [0] => Array ( [ORDER] => Array ( [DATE] => 2008-11 [QTY] => 285 ) )
    [1] => Array ( [ORDER] => Array ( [DATE] => 2008-12 [QTY] => 900 ) )
)   

私の最終目標は、その月に注文がない場合に 0 を表示する Google 折れ線グラフに使用する Ym 日付の配列を作成することです。したがって、その配列は次のようになります。

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 ) )

同じ日付の値を持つエントリが 2 番目の配列にあったため、削除されました。

今、これが正しい方法であるかどうかはわかりませんが、これまでのところ私が持っているものは次のとおりです。

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 に答える