PHPでdiff (差分比較) に対応する方法をまとめて紹介します。
ソフトウェア開発やテキストデータの編集において、差分検出の重要性があります。ソースコードの変更、テキストファイルの更新、データの違いを正確に把握することは、問題の特定や効率的な作業に欠かせません。
この記事では、PHPを使った差分検出の方法について探求します。配列から文字列まで、広範なデータ構造とケースに対応する方法に焦点を当てて紹介していきます。
PHPを使用したアプリケーション開発の中で、入力テキストの差分を出す方法を習得する事で、ご自分のプロジェクトをより良い物にしてください。
目次
配列の差分比較
array_diff
関数を使用します。
<?php
// 2つの配列を定義します
$array1 = array('apple', 'banana', 'orange', 'grape', 'a' => 'kiwi');
$array2 = array('banana', 'kiwi', 'grape', 'pineapple');
// 第1引数($array1)の配列のみに存在する値を差分として取得します
$difference = array_diff($array1, $array2);
echo "配列1の要素: " . implode(', ', $array1) . "\n";
// 配列1の要素: apple, banana, orange, grape, kiwi
echo "配列2の要素: " . implode(', ', $array2) . "\n";
// 配列2の要素: banana, kiwi, grape, pineapple
echo "差分の要素: " . implode(', ', $difference) . "\n";
// 差分の要素: apple, orange
PHP公式マニュアルはこちら: https://www.php.net/manual/ja/function.array-diff.php
array_diff関数は配列を渡して差分を取得する事ができます。第1引数に渡した配列にのみ存在する値を検知する事ができ、第2引数以降には配列を複数指定することも可能です。
'a' => 'kiwi'
の指定からもわかるように、キーは比較対象にならず、値のみを比較して差分を出力します。
文字列の差分比較
文字列の差分を出すにはライブラリを使用します。
https://github.com/jfcherng/php-diff
テキスト形式やHTML形式での出力に対応しています。
こちらのライブラリに付属している example/
配下のコードで挙動を確認してみます。
$ git clone https://github.com/jfcherng/php-diff.git
$ cd php-diff/
$ composer install
$ cd examle/
比較するサンプルファイルはデフォルトだと解りづらかったので編集してみました。
$ cat new_file.txt
1
2
3
4
5
123
456
あいうえお
$ cat old_file.txt
1
2
3
4
5
1243
456
789
あいえお
かきくけこ
$ diff new_file.txt old_file.txt
6c6
< 123
---
> 1243
8c8,10
< あいうえお
---
> 789
> あいえお
> かきくけこ
コマンドラインで php demo_cli.php
を実行した結果
HTMLで差分を表示するサンプルはこちら
composer run-script server
http://localhost:12388/demo_web.php にアクセスした結果
HTML表示では様々なパターンが用意されているので、プロジェクトにあった表示方法を模索してみてください。
日付の差分比較
何日前、何日後など、日数の比較をする方法です。
<?php
$origin = new DateTimeImmutable('2023-08-30');
$target = new DateTimeImmutable('2023-09-02');
$interval = $origin->diff($target);
echo $interval->format('%R%a days');
echo "\n";
$origin = date_create('2023-08-30');
$target = date_create('2023-08-23');
$interval = date_diff($origin, $target);
echo $interval->format('%R%a days');
echo "\n";
$ php date.php
+3 days
-7 days
PHPマニュアル: https://www.php.net/manual/ja/datetime.diff.php
終わりに
以上、PHPでdiffとして差分比較をするための方法でした。
私自身、diffというと diff
コマンドやgit diff
など文字列での比較をイメージしていたのですが、配列や日付など、様々なdiffが用意されている事がわかりました。
ご自分のプロジェクトにあった差分比較を使いこなして活用していってください。
コメントを残す