I have two multidimensional arrays with me..
$array1 = [ ['sight_id' => 13, 'location' => 'Jodhpur, Rajasthan, India'], ['sight_id' => 14, 'location' => 'Jodhpur Jn, Jodhpur, Rajasthan, India'], ['sight_id' => 15, 'location' => 'D-Kirtinagar, Jodhpur, Rajasthan, India'], ]; $array2 = [ ['sight_id' => 13, 'location' => 'Jodhpur, Rajasthan, India'], ['sight_id' => 14, 'location' => 'Jodhpur Jn, Jodhpur, Rajasthan, India'], ['sight_id' => 16, 'location' => 'Jaisalmer, Rajasthan, India'], ['sight_id' => 17, 'location' => 'Fort Road, Amar Sagar Pol, Jaisalmer, Rajasthan, India'], ];
I want to split above given arrays into three different arrays..
$intersect_array=Array ( [0] => Array ( [sight_id] => 13 [location] => Jodhpur, Rajasthan, India ) [1] => Array ( [sight_id] => 14 [location] => Jodhpur Jn, Jodhpur, Rajasthan, India )); $only_a1=Array( [0]=> Array ( [sight_id] => 15 [location] => D-Kirtinagar, Jodhpur, Rajasthan, India )); $only_a2=Array( [1] => Array ( [sight_id] => 16 [location] => Jaisalmer, Rajasthan, India ) [2] => Array ( [sight_id] => 17 [location] => Fort Road, Amar Sagar Pol, Jaisalmer, Rajasthan, India ));
Advertisement
Answer
Convert arrays to a format, where array index is the sight_id:
$b1 =array(); foreach($a1 as $x) $b1[$x['sight_id']] = $x['location']; $b2 =array(); foreach($a2 as $x) $b2[$x['sight_id']] = $x['location'];
Calculate the differences and intersection:
$c_intersect = array_intersect_key($b1,$b2); $c_1 = array_diff_key($b1,$b2); $c_2 = array_diff_key($b2,$b1);
Convert arrays back to your format:
$intersect_array = array(); foreach($c_intersect as $i=>$v) $intersect_array[] = array('sight_id'=>$i,'location'=>$v); $only_a1 = array(); foreach($c_1 as $i=>$v) $only_a1[] = array('sight_id'=>$i,'location'=>$v); $only_a2 = array(); foreach($c_2 as $i=>$v) $only_a2[] = array('sight_id'=>$i,'location'=>$v);