kapil
kapil

Reputation: 483

How to get the difference of two multidimensional arrays in php?

I want to get the difference of two multidimensional arrays, e.g.,

First Array:

Array
(
    [qtr_selected] => Array
        (
            [partner_q_m_p__2031] => Array
                (
                    [0] => q1
                    [1] => q2
                )

            [partner_q_m_p__2032] => Array
                (
                    [0] => q1
                )

        )

)

Second Array:

 Array
(
    [qtr_completed] => Array
        (
            [partner_q_m_p__2031] => Array
                (
                    [0] => q1
                )

        )

)

how do i get the difference of array1 & array2 as given below:

   Array
(
    [qtr_final] => Array
        (
            [partner_q_m_p__2031] => Array
                (
                    [0] => q2
                )

            [partner_q_m_p__2032] => Array
                (
                    [0] => q1
                )

        )

)

Tried array_diff() function but not getting array1 as difference except array2, i want array1 after subtracting array2 from it.

Upvotes: 3

Views: 6459

Answers (3)

Narendrasingh Sisodia
Narendrasingh Sisodia

Reputation: 21422

Simply make a custom function like as

function check_diff($arr1, $arr2){
    $check = (is_array($arr1) && count($arr1)>0) ? true : false;
    $result = ($check) ? ((is_array($arr2) && count($arr2) > 0) ? $arr2 : array()) : array();
    if($check){
        foreach($arr1 as $key => $value){
            if(isset($result[$key])){
                $result[$key] = array_diff($value,$result[$key]);
            }else{
                $result[$key] = $value;
            }
        }
    }

    return $result;
}
$result['qtr_final'] = check_diff($a1['qtr_selected'],$a2['qtr_completed']);
print_r($result);

Upvotes: 4

AnkiiG
AnkiiG

Reputation: 3488

Try as below :

$a1 = Array
(
        'qtr_selected' => Array
        (
                'partner_q_m_p__2031' => Array
                (
                        '0' => 'q1',
                        '1' => 'q2',
                ),

                'partner_q_m_p__2032' => Array
                (
                        '0' => 'q1'
                )

        )

);

$a2 = Array
(
        'qtr_completed' => Array
        (
                'partner_q_m_p__2031' => Array
                (
                        '0' => 'q1'
                )

        )

);

$result['qtr_final'] = check_diff_multi($a1['qtr_selected'], 

$a2['qtr_completed']);
print '<pre>';
print_r($result);
print '</pre>';


function check_diff_multi($array1, $array2){
    $result = array();
    foreach($array1 as $key => $val) {
        if(isset($array2[$key])){
            if(is_array($val) && $array2[$key]){
                $result[$key] = check_diff_multi($val, $array2[$key]);
            }
        } else {
            $result[$key] = $val;
        }
    }

    return $result;
}

Upvotes: 1

devpro
devpro

Reputation: 16117

You can get difference of array1 and array2 by using this:

<?
// array 1
$array1['qtr_selected']['partner_q_m_p__2031'] = array('q1','q2');
$array1['qtr_selected']['partner_q_m_p__2032'] = array('q1');

// array 2
$array2['qtr_completed']['partner_q_m_p__2031'] = array('q1');

$removalArr = array();
foreach ($array2 as $key1 => $value1) {
    foreach ($value1 as $key2 => $value2) {
        $removalArr = $value2; // get last value of removal array
    }
}

$finalArr = array();
foreach ($array1 as $key1 => $value1) {
    foreach ($value1 as $key2 => $value2) {
        // check difference if available, 
        // if difference available use array_diff else use normal.
        $finalArr['qtr_final'][$key2] = (array_diff($value2,$removalArr) ? array_diff($value2,$removalArr) : $value2); 
    }
}

echo "<pre>";
print_r($finalArr);

?>

Result:

Array
(
    [qtr_final] => Array
    (
        [partner_q_m_p__2031] => Array
        (
            [1] => q2
        )

        [partner_q_m_p__2032] => Array
        (
            [0] => q1
        )    
    )    
)

Upvotes: 0

Related Questions