比较两个数组并附加最后一个值,如果它们是相同的其他值零

时间:2014-06-23 07:20:50

标签: php arrays

我有两个字符串值,即$ late_array和$ wrong_array。值以逗号分隔。 我想要做的是比较两个数组,如果前两个元素相同,则将值添加到结尾,否则使其为零。我拥有的数组:

$late_array = array(
            [0] => 140610d,Richard,12
            [1] => 140610a,Dave,22
            [2] => 140610n,Noddy,121
            [3] => 140610a,Nick,15
 )
 $wrong_array = array(
            [0] => 140610d,Richard,2
            [1] => 140610d,Mary,60
            [2] => 140610a,Dave,11
            [3] => 140610n,Noddy,90
 )

最终结果应为:

 $combined_array = array(
            [0] => 140610d,Richard,12,2
            [1] => 140610d,Mary,0,60
            [2] => 140610a,Dave,22,11
            [3] => 140610a,Nick,15,0
            [4] => 140610n,Noddy,121,90
  )
到目前为止,我已经组建了一个foreach并使用了' ==='运算符检查日期和名称是否匹配然后按我的意愿输出但如果名称不在一个数组中而另一个数组中存在,则我无法使其工作。

编辑:希望清理它。如果两个数组中都存在该值,则应显示日期,名称,后期值,错误值。但如果价值仅在晚期出现,则错误的值应为0,反之亦然。添加"尼克"尝试解释一下。

这是我到目前为止解决问题的方法:

$wrong_val = array();
foreach($out as $wrong_value) { 
    $wrong_tosearch[] = substr($wrong_value,0,strrpos($wrong_value,",")); 
    $w_id = substr($wrong_value,0,strrpos($wrong_value,","));
    $wrong_val[$w_id] = substr($wrong_value,strrpos($wrong_value,",")+1,strlen($wrong_value));
}
foreach($sql_late_array as $late_value) {
    $late_tosearch[] = substr($late_value,0,strrpos($late_value,","));
    $l_id = substr($late_value,0,strrpos($late_value,","));
    $late_val[$l_id] = substr($late_value,strrpos($late_value,",")+1,strlen($late_value));
}
$merge = array_merge($wrong_tosearch,$late_tosearch);
$sort = array_values(array_unique($merge));

$combined_array = array();
foreach ($sort as $search_val) {
    if (array_key_exists($search_val,$wrong_val) !== FALSE) {
        foreach ($wrong_val as $w_key=>$w_val) {
            $combined_array[$w_key]['late'] = "0";
            $combined_array[$w_key]['wrong'] = $w_val;
        }
    }
    if (array_key_exists($search_val,$late_val) !== FALSE) {
        foreach ($late_val as $l_key=>$l_val) {
            $combined_array[$l_key]['wrong'] = "0";
            $combined_array[$l_key]['late'] = $l_val;
        }
    }
}
print_r($combined_array);

2 个答案:

答案 0 :(得分:0)

可能很大但是有效

<?php
$late_array = array(
        0 => "140610d,Richard,12",
        1 => "140610a,Dave,22",
        2 => "140610n,Noddy,121",
 );
 $wrong_array = array(
        0 => "140610d,Richard,2",
        1 => "140610d,Mary,60",
        2 => "140610a,Dave,11",
        3 => "140610n,Noddy,90"
 );

 $pattern = "/[0-9]*[a-zA-Z]*,[0-9]*[a-zA-Z]*,/";
$combined_array = $late_array;
foreach($wrong_array as $wrong_index => $wrong_value){
    foreach($late_array as $late_index => $late_value){
        preg_match_all($pattern, $late_value, $late_matches);
        preg_match_all($pattern, $wrong_value, $wrong_matches);

       if($late_matches[0] == $wrong_matches[0]){
           $explode = explode(',',$wrong_value);
           $combined_array[$late_index] = $combined_array[$late_index].','.$explode[2];
           $matchedValues[] = $wrong_index;
       }
    }
}

$unmatched_values = array_diff(array_keys($wrong_array), array_values($matchedValues));
foreach($unmatched_values as $key => $value){
    $combined_array[] = $wrong_array[$value].',0';
}
echo '<pre>';
print_r($combined_array);
?>

答案 1 :(得分:0)

检查以下代码是否解决了您的问题。

$late_array = array(
        "0" => "140610d,Richard,12",
        "1" => "140610a,Dave,22",
        "2" => "140610n,Noddy,121"
 );
    $wrong_array = array(
        "0" => "140610d,Richard,2",
        "1" => "140610d,Mary,60",
        "2" => "140610a,Dave,11",
        "3" => "140610n,Noddy,90"
 );

 foreach($wrong_array as $wv)
 { 
  $tosearch = substr($wv,0,strrpos($wv,",")-1); 
  $valtoadd = substr($wv,strrpos($wv,",")+1,strlen($wv)); 

  $added=false;
  foreach($late_array as $lv)
  {
     if(strstr($lv, $tosearch) !== false) 
     {  
        $combined_array[] = $lv.",".$valtoadd; 
        $added=true;
        break;
     }
  }
  if(!$added)
    $combined_array[] = $tosearch.",0,".$valtoadd; 
  }

  $tcombined_array = $combined_array; 
  foreach($late_array  as $wv)
  {
  $added = false;   
  foreach($tcombined_array  as $cv)
    if(strstr($cv,$wv)) 
     $added = true; 

  if(!$added) $combined_array[] = $wv.",0";
  } 

  print_r($combined_array);