一尘不染

递归array_diff()吗?

php

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

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

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


阅读 179

收藏
2020-05-26

共1个答案

一尘不染

在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个或更多阵列的差异,则可以顺序运行差异。同样,此方法使用密钥检查并进行宽松的验证。

2020-05-26