php - 递归 array_diff()?

标签 php arrays recursion diff

我正在寻找一些工具来为我提供两个数组的递归差异。我设想的是一个带有两个颜色编码树结构的网页。在每棵树上,绿色是数组中与两个数组都匹配的部分,红色是每个数组中不匹配的部分。类似于 dBug 的输出

我有一些代码可以给我一个嵌套数组来填充报告。我正在开发一种应该更快的新方法,但我需要测试值和结构,以确保它提供与旧方法相同的输出。

有什么东西可以用吗?或者我需要写这个吗?还是有其他方法可以实现我的目标?

最佳答案

array_diff 的评论中实现了一个这样的功能.

function arrayRecursiveDiff($aArray1, $aArray2) {
  $aReturn = array();

  foreach ($aArray1 as $mKey => $mValue) {
    if (array_key_exists($mKey, $aArray2)) {
      if (is_array($mValue)) {
        $aRecursiveDiff = arrayRecursiveDiff($mValue, $aArray2[$mKey]);
        if (count($aRecursiveDiff)) { $aReturn[$mKey] = $aRecursiveDiff; }
      } else {
        if ($mValue != $aArray2[$mKey]) {
          $aReturn[$mKey] = $mValue;
        }
      }
    } else {
      $aReturn[$mKey] = $mValue;
    }
  }
  return $aReturn;
} 

该实现一次只处理两个数组,但我认为这真的没有问题。如果一次需要 3 个或更多数组的差异,则可以按顺序运行差异。此方法还使用 key 检查并进行松散验证。

关于php - 递归 array_diff()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16464117/

相关文章:

php - 检测在线用户 : PHP

PHP 未作为 Apache 的模块加载

javascript - 从包含javascript中的数组和值的对象数组创建数组和值的对象

c++ - 这两种动态扩展数组的方法有什么区别?

Python 可以运行 while 循环直到 RuntimeError : maximum recursion depth exceeded while calling a Python object

php - 在 opencart html 模块中使用 php 标签

php - SOAP 错误 : Encoding: Violation of encoding rules?

c# - 结果显示 System.String[]

javascript - 无法从目录中递归获取所有文本文件名

java - 代码为 123456789 提供了 java.lang.StackOverflowError,但为 9999999999999999999 提供了 java.lang.StackOverflowError