recursive array diff