for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
namespace Diff\Differ;
use Diff\ArrayComparer\ArrayComparer;
use Diff\ArrayComparer\NativeArrayComparer;
use Diff\ArrayComparer\StrictArrayComparer;
use Diff\DiffOp\DiffOp;
use Diff\DiffOp\DiffOpAdd;
use Diff\DiffOp\DiffOpRemove;
use InvalidArgumentException;
/**
* Differ that only looks at the values of the arrays (and thus ignores key differences).
*
* By default values are compared using a StrictArrayComparer.
* You can alter the ArrayComparer used by providing one in the constructor.
* @since 0.4
* @license GPL-2.0+
* @author Jeroen De Dauw < [email protected] >
*/
class ListDiffer implements Differ {
* @var ArrayComparer
private $arrayComparer;
public function __construct( ArrayComparer $arrayComparer = null ) {
$this->arrayComparer = $arrayComparer ?? new StrictArrayComparer();
}
* @see Differ::doDiff
* @param array $oldValues The first array
* @param array $newValues The second array
* @return DiffOp[]
public function doDiff( array $oldValues, array $newValues ): array {
$operations = array();
foreach ( $this->diffArrays( $newValues, $oldValues ) as $addition ) {
$operations[] = new DiffOpAdd( $addition );
foreach ( $this->diffArrays( $oldValues, $newValues ) as $removal ) {
$operations[] = new DiffOpRemove( $removal );
return $operations;
* @param array $arrayOne
* @param array $arrayTwo
* @return array
private function diffArrays( array $arrayOne, array $arrayTwo ): array {
return $this->arrayComparer->diffArrays( $arrayOne, $arrayTwo );