使用PHP in_array匹配字符串

时间:2012-10-12 15:08:31

标签: php arrays

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

问题是:我是否认为这一切都错了,或者是否有更好的方法。

我希望这一切都有道理。

2 个答案:

答案 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'] . '&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;
    }
}

答案 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);
}