Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message
Array Diff Multidimensional

Array Diff Multidimensional Laravel Package

rogervila/array-diff-multidimensional

Compute diffs between multidimensional PHP arrays with support for nested structures. Useful for comparing configs, payloads, and serialized data, returning added/removed/changed values so you can detect what changed and where.

View on GitHub
Deep Wiki
Context7

Compare the difference between two multidimensional arrays

Frequently asked questions about Array Diff Multidimensional
How do I install this package in a Laravel project?
Run `composer require rogervila/array-diff-multidimensional` in your project directory. The package has no Laravel-specific dependencies, so it integrates seamlessly with existing Composer-based workflows. For Laravel 8+, ensure your `composer.json` targets PHP 8.1+.
Does this package support Laravel’s service container or facades?
Yes, you can register it as a service provider or create a facade (e.g., `Diff::compare()`) to match Laravel’s `Arr::` helper pattern. The package’s stateless design makes it easy to bind as a singleton in your `AppServiceProvider` or a dedicated provider.
What Laravel versions does this package support?
The package is framework-agnostic but works with Laravel 8+ (PHP 8.1+). For older Laravel versions, ensure your project’s PHP version meets the 8.1+ requirement. No Laravel-specific features are required, so it integrates cleanly with any Laravel 8.x or 9.x app.
How does this compare to Laravel’s built-in `Arr::diff()`?
Unlike `Arr::diff()`, which only handles flat arrays, this package recursively compares nested structures, including additions, removals, and changed values. Use it for complex configs, API payloads, or Eloquent model attributes where `Arr::diff()` falls short.
Will this work with circular references in arrays?
No, circular references (e.g., self-referential arrays) will cause infinite loops. Pre-process your data with `json_encode()` or flatten structures if circularity is a risk. For production use, validate inputs or implement a depth limit in your application logic.
Can I use this for testing Laravel API responses?
Absolutely. The package is perfect for asserting complex JSON responses in PHPUnit or PestPHP. Compare API payloads, nested form submissions, or Eloquent collections by wrapping the diff in a custom assertion or helper method.
How does performance scale with large arrays (e.g., 10,000+ elements)?
Performance degrades with deep or wide arrays due to recursion. For large datasets, benchmark against `array_diff_recursive` or consider streaming approaches (e.g., `SplObjectStorage`). If needed, pre-filter arrays to reduce comparison scope.
Does the diff output format match Laravel’s validation/error handling?
The output is a structured array with `added`, `removed`, and `changed` keys, which can be mapped to Laravel’s validation messages or error bags. Extend the package or wrap its output in a custom formatter to align with your application’s error-handling conventions.
Are there alternatives for Laravel-specific array diffing?
For Laravel, consider `spatie/array-to-xml` for XML comparisons or custom logic using `array_diff_recursive`. For database-level diffs, leverage PostgreSQL’s `jsonb` operators or MySQL’s `JSON_DIFF`. This package excels for PHP-native, in-memory comparisons.
How do I handle non-serializable objects in arrays?
Objects must implement `__toString` or `JsonSerializable` for accurate diffing. Pre-process arrays with `json_encode()` or cast objects to arrays using `get_object_vars()` if serialization isn’t an option. Test edge cases like custom classes or closures.
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
socialdept/atp-orm
cboxdk/laravel-assistant-client
socialdept/atp-resolver
socialdept/tenant-domains
tautvydasr/blade-class-names
socialdept/color-scales
maherelgamil/controller
coleus/widgets
coleus/table
coleus/users
coleus/music
coleus/health
coleus/calendar
coleus/notes
coleus/support
coleus/settings
coleus/apps
seampact/laravel
emmyconceptng/laravel-ng-postcode
jjsquady/round-robin