Question

I have an array :

Array
(
    [0] => stdClass Object
        (
            [driver_id] => 2
            [total] => 308
            [total_driver] => 5
            [score1] => 61.6000
            [score2] => 62
        )

    [1] => stdClass Object
        (
            [driver_id] => 3
            [total] => 354
            [total_driver] => 5
            [score1] => 70.8000
            [score2] => 71
        )
)

and another array:

Array
(
    [0] => Array
        (
            [driver_id] => 2
            [recommendation_min] => 0
            [recommendation_max] => 50
            [recommendation_key_range] => Low
            [recommendation_observation] => Low
            [recommendation_] => Low
        )

    [1] => Array
        (
            [driver_id] => 2
            [recommendation_min] => 51
            [recommendation_max] => 78
            [recommendation_key_range] => Moderate
            [recommendation_observation] => Moderate
            [recommendation_] => Moderate
        )

)

How do I merge array to so that it looks like this:

        [driver_id] => 2
        [recommendation_min] => 51
        [recommendation_max] => 78
        [recommendation_key_range] => Moderate
        [recommendation_observation] => Moderate
        [recommendation_] => Moderate
        [total] => 308
        [total_driver] => 5
        [score1] => 61.6000
        [score2] => 62

using driver_id (2) and score2 (62) recommendation_key_range = moderate because range 62 is between [recommendation_min] => 51 and [recommendation_max] => 78

any idea, thanx

Was it helpful?

Solution

Basically just need to use array_merge and a couple of predicate statements to decide which array to merge based on score1 & score2. Something like this should serve:

$drivers = array();
$drivers[0] = array('driver_id' => 2, 'total' => 308, 'total_driver' => 5, 'score1' => 61.6, 'score2' => 62 );
$drivers[1] = array('driver_id' => 3, 'total' => 354, 'total_driver' => 5, 'score1' => 70.8, 'score2' => 71 );

$recommends = array();
$recommends[0] = array('driver_id' => 2, 'recommendation_min' => 0, 'recommendation_max' => 50, 'recommendation_key_range' => "Low", 'recommendation_observation' => "Low", 'recommendation_' => "Low" );
$recommends[1] = array('driver_id' => 2, 'recommendation_min' => 51, 'recommendation_max' => 78, 'recommendation_key_range' => "Moderate", 'recommendation_observation' => "Moderate", 'recommendation_' => "Moderate" );

$results = array();
foreach($drivers as $driver) {
    if($driver['score1'] > 50 || $driver['score2'] > 50) {
        $driver = array_merge($driver,$recommends[1]);
    } else {
        $driver = array_merge($driver, $recommends[0]);
    }
    $results[] = $driver;
}

OTHER TIPS

 $drivers = array();
 $drivers[0] = array('driver_id' => 2, 'total' => 308, 'total_driver' => 5, 'score1'   => 61.6, 'score2' => 62 );
 $drivers[1] = array('driver_id' => 3, 'total' => 354, 'total_driver' => 5, 'score1' => 70.8, 'score2' => 71 );
 $drivers[2] = array('driver_id' => 4, 'total' => 354, 'total_driver' => 5, 'score1' => 70.8, 'score2' => 71 );
 $drivers[3] = array('driver_id' => 5, 'total' => 354, 'total_driver' => 5, 'score1' => 70.8, 'score2' => 71 );

 $recommends = array();
 $recommends[0] = array('driver_id' => 2, 'recommendation_min' => 0, 'recommendation_max' => 50, 'recommendation_key_range' => "Low", 'recommendation_observation' => "Low", 'recommendation_' => "Low" );

 $recommends[1] = array('driver_id' => 2, 'recommendation_min' => 51, 'recommendation_max' => 78, 'recommendation_key_range' => "Moderate", 'recommendation_observation' => "Moderate", 'recommendation_' => "Moderate" );
 $recommends[2] = array('driver_id' => 4, 'recommendation_min' => 51, 'recommendation_max' => 78, 'recommendation_key_range' => "Moderate", 'recommendation_observation' => "Moderate", 'recommendation_' => "Moderate" );


 $one = array();
 $matched = array();
 $flag = 0;
 $myarray = array();

 foreach($drivers as $key=>$data){   
    foreach($recommends as $keys=>$dt){
       if($data['driver_id']==$dt['driver_id']){            
          $one = array_merge($data , $dt);
       }
     }

    if(!empty($matched)){
        foreach($matched as $key=>$dta){

           if($dta['driver_id']==$one['driver_id']) 
             $flag = 1;
         }

         if($flag==0){
            $matched[] = $one;
            $myarray[] = $one['driver_id'];
         }

      $flag=0;

     }else{
       $matched[] = $one;
       $myarray[] = $one['driver_id'];
     }
 }
$myarray = array_unique($myarray);

foreach($drivers as $key=>$data){   
    if(!in_array($data['driver_id'] , $myarray)){
       $matched[] = $data;
     }
}

foreach($recommends as $key=>$dta){   
    if(!in_array($dta['driver_id'] , $myarray)){
        $matched[] = $data;
    }
}

echo "<pre>";
print_r($matched);
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top