jblond / php-diff
A comprehensive library for generating differences between two hashable objects (strings or arrays).
Installs: 100 953
Dependents: 0
Suggesters: 0
Security: 0
Stars: 36
Watchers: 7
Forks: 190
Open Issues: 2
Requires
- php: >=7.3
- ext-mbstring: *
- ext-pcre: *
Requires (Dev)
- digilive/git-changelog: ^1
- jblond/php-cli: ^1.0
- phpmd/phpmd: 2.*
- phpunit/phpunit: ^8 || ^9
- squizlabs/php_codesniffer: *
Suggests
- jblond/php-cli: ^1.0
README
Introduction
A comprehensive library for generating differences between two hashable objects (strings or arrays). Generated differences can be rendered in all the standard formats including:
- Unified
- Context
- Side by Side HTML
- Unified HTML
- Unified Commandline colored output
- JSON
The logic behind the core of the diff engine (ie, the sequence matcher) is primarily based on the Python difflib package. The reason for doing so is primarily because of its high degree of accuracy.
Install
composer require jblond/php-diff
Install for cli support
For cli usage you need to install the suggested jblond/php-cli
package.
Documentation
See the Wiki for
Changelog
Example Use
<?php use jblond\Diff; use jblond\Diff\Renderer\Html\SideBySide; // Installed via composer... require 'vendor/autoload.php'; $sampleA = file_get_contents(dirname(__FILE__).'/a.txt'); $sampleB = file_get_contents(dirname(__FILE__).'/b.txt'); // Options for generating the diff. $options = [ 'ignoreWhitespace' => true, 'ignoreCase' => true, 'context' => 2, 'cliColor' => true, // for cli output 'ignoreLines' => Diff::DIFF_IGNORE_LINE_BLANK, ]; // Initialize the diff class. $diff = new Diff($sampleA, $sampleB /*, $options */); // Choose Renderer. $renderer = new SideBySide([ 'title1' => 'Custom title for sample A', 'title2' => 'Custom title for sample B', ]); // Show the output of the difference renderer. echo $diff->Render($renderer); // Alternative // Show the differences or a message. echo $diff->isIdentical() ? 'No differences found.' : '<pre>' . htmlspecialchars($diff->render($renderer)) . '</pre>' ;
Example Output
File example.php
contains a quick demo and can be found in the example/
directory. Included is a light and a dark theme.
HTML Side By Side Example
More Example Pictures
HTML Unified Example
Text Unified Example
Text Context Example
Text Unified Console Example
Requirements
- PHP 7.3 or greater
- PHP Multibyte String
- jblond/php-cli (suggested)
Contribution, Issues and feature requests
If you found a bug, or have an idea for new functionality, feel free to report it on the issue tracker - just use search beforehand. Issue tracker
You can also fork this repository and open a PR.
Merge files using jQuery
Xiphe has build a jQuery plugin with that you can merge the compared files. Have a look at jQuery-Merge-for-php-diff .
Todo
- 3 way diff support
Contributors
Contributors since I forked the repo.
License (BSD License)
see License
Tests
composer run-script phpunit composer run-script php_src composer run-script php_test