[ create a new paste ] login | about

Link: http://codepad.org/76TEonav    [ raw code | output | fork ]

PHP, pasted on Aug 23:
<?php
function arrayRecursiveDiff($array1, $array2){
    $aReturn = array();

    foreach ($array1 as $mKey => $mValue) {
        if (is_array($array2) && array_key_exists($mKey, $array2)) {
            if (is_array($mValue)) {
                $aRecursiveDiff = arrayRecursiveDiff($mValue, $array2[$mKey]);
                if (count($aRecursiveDiff)) { $aReturn[$mKey] = $aRecursiveDiff; }
            } else {
                if ($mValue != $array2[$mKey]) {
                    $aReturn[$mKey] = $mValue;
                }
            }
        } else {
            $aReturn[$mKey] = $mValue;
        }
    }
    return $aReturn;
}

function arrayIsDeeper($array, $level = 1){
    $current_depth = 1;
    foreach($array as $value)
        if(is_array($value)) {
            $current_depth ++;
            if($current_depth > $level)
                return true;
            else return arrayIsDeeper($value, $level-1);
        }
    return false;
}

function arrayRecursiveReindex(&$array){
    // if this is a
    if(!arrayIsAssoc($array)){
       $array = array_values($array);
    }

    if(arrayIsDeeper($array, 1)){
        foreach($array as $key => $value){
            if(is_array($value))
                arrayRecursiveReindex($array[$key]);
        }
    }   
}

function arrayIsAssoc($arr)
{
    foreach(array_keys($arr) as $key) if(!is_integer($key)) return true;
    return false;
}

$a = array("installed" => array('somevalue2', 'somevalue1', array('somethingelse2'), 'somevalue3'),
    "backend" => array("preload" => array('somevalue4'=>array('value1', 'value2','value3'),'somevalue5')));

$b = array("installed" => array('somevalue2', array('somethingelse'), 'somevalue5', 'somevalue10'),
    "backend" =>array("preload" => array('somevalue4'=>array('value1', 'value4','value5'),'somevalue6')));


var_dump($aDiff=arrayRecursiveDiff($a, $b));
var_dump(arrayIsDeeper($aDiff, 2));
arrayRecursiveReindex($aDiff);
var_dump($aDiff);


Output:
array(2) {
  ["installed"]=>
  array(3) {
    [1]=>
    string(10) "somevalue1"
    [2]=>
    array(1) {
      [0]=>
      string(14) "somethingelse2"
    }
    [3]=>
    string(10) "somevalue3"
  }
  ["backend"]=>
  array(1) {
    ["preload"]=>
    array(2) {
      ["somevalue4"]=>
      array(2) {
        [1]=>
        string(6) "value2"
        [2]=>
        string(6) "value3"
      }
      [0]=>
      string(10) "somevalue5"
    }
  }
}
bool(true)
array(2) {
  ["installed"]=>
  array(3) {
    [0]=>
    string(10) "somevalue1"
    [1]=>
    array(1) {
      [0]=>
      string(14) "somethingelse2"
    }
    [2]=>
    string(10) "somevalue3"
  }
  ["backend"]=>
  array(1) {
    ["preload"]=>
    array(2) {
      ["somevalue4"]=>
      array(2) {
        [0]=>
        string(6) "value2"
        [1]=>
        string(6) "value3"
      }
      [0]=>
      string(10) "somevalue5"
    }
  }
}


Create a new paste based on this one


Comments: