FluidTYPO3\Flux\Utility\RecursiveArrayUtility::diff PHP Метод

diff() публичный статический Метод

public static diff ( array $array1, array $array2 ) : array
$array1 array
$array2 array
Результат array
    public static function diff($array1, $array2)
    {
        $array1 = (array) $array1;
        $array2 = (array) $array2;
        foreach ($array1 as $key => $value) {
            if (TRUE === isset($array2[$key])) {
                if (TRUE === is_array($value) && TRUE === is_array($array2[$key])) {
                    $diff = self::diff($value, $array2[$key]);
                    if (0 === count($diff)) {
                        unset($array1[$key]);
                    } else {
                        $array1[$key] = $diff;
                    }
                } elseif ($value == $array2[$key]) {
                    unset($array1[$key]);
                }
                unset($array2[$key]);
            }
        }
        foreach ($array2 as $key => $value) {
            if (FALSE === isset($array1[$key])) {
                $array1[$key] = $value;
            }
        }
        return $array1;
    }

Usage Example

 /**
  * @test
  */
 public function canOperateArrayDiffFunction()
 {
     $array1 = array('bar' => TRUE, 'baz' => TRUE, 'same' => array('foo' => TRUE), 'foo' => array('bar' => TRUE, 'foo' => TRUE));
     $array2 = array('bar' => TRUE, 'baz' => FALSE, 'new' => TRUE, 'same' => array('foo' => TRUE), 'foo' => array('bar' => TRUE));
     $expected = array('baz' => TRUE, 'foo' => array('foo' => TRUE), 'new' => TRUE);
     $product = RecursiveArrayUtility::diff($array1, $array2);
     $this->assertSame($expected, $product);
 }