Wednesday, 15 September 2010

php - Compare two arrays and append last values if they are the same else value zero -



php - Compare two arrays and append last values if they are the same else value zero -

i have 2 string values namely $late_array , $wrong_array. values comma delimited. compare 2 arrays , if first 2 elements same add together value end else create zero. arrays have:

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

the end result should be:

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

i have far formed foreach , used '===' operators check if date , name match output want have not been able work if name not nowadays in 1 array create value zero.

edit: clear up, hopefully. if value nowadays in both arrays date,name,late value,wrong value should show. if value nowadays in late value wrong should 0, same visa versa. added "nick" seek , explain bit better.

this did solve problem far:

$wrong_val = array(); foreach($out $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 $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 $search_val) { if (array_key_exists($search_val,$wrong_val) !== false) { foreach ($wrong_val $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 $l_key=>$l_val) { $combined_array[$l_key]['wrong'] = "0"; $combined_array[$l_key]['late'] = $l_val; } } } print_r($combined_array);

check if below code solves problem.

$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 $wv) { $tosearch = substr($wv,0,strrpos($wv,",")-1); $valtoadd = substr($wv,strrpos($wv,",")+1,strlen($wv)); $added=false; foreach($late_array $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 $wv) { $added = false; foreach($tcombined_array $cv) if(strstr($cv,$wv)) $added = true; if(!$added) $combined_array[] = $wv.",0"; } print_r($combined_array);

php arrays

No comments:

Post a Comment