【问题标题】:How can I compare two nested arrays in PHP?如何比较 PHP 中的两个嵌套数组?
【发布时间】:2021-06-25 13:41:19
【问题描述】:

最近,我在比较 2 个嵌套数组时遇到了一些问题。我已经测试过使用 array_diff_assoc 来比较 2 个数组,但它返回的结果不正确。下面是我试图在 php 中比较这两个嵌套数组的几个场景。

$arr1 = ["colorFamily"=>[]];
$arr2 = ["colorFamily"=>["blue","black"]];
$diff = array_diff_assoc($arr1,$arr2);

$diff 预计会在下面返回;

["colorFamily"=>[]]

不幸的是,它在下面返回:

[]

除此之外,还会使用更复杂的场景进行比较,例如

$arr1 = ["colorFamily"=>[],"descriptionMeasurement"=>[["label"=>"orange"],["value"=>"apple"]]];
$arr2 = ["colorFamily"=>["blue","black"],"descriptionMeasurement"=>[["label"=>"orange"]]];

以上场景,应该返回

["colorFamily"=>[],"descriptionMeasurement"=>[["label"=>"orange"]]].

简而言之,任何发生在 $arr1 中而没有发生在 $arr2 中的东西,都应该在 $diff 数组中返回。 我希望你们能帮我解决这个问题,我已经卡了好几个星期了。

【问题讨论】:

  • 希望对你有帮助(看第二种方案):stackoverflow.com/questions/7389176/…
  • 嗨,哈桑,我已经浏览了您提供的链接,但没有找到相关的解决方案来解决我的问题。
  • 为什么会在第二个结果中出现"descriptionMeasurement"=>[["label"=>"orange"]]?在我看来,这两个数组都一样。

标签: php algorithm recursive-datastructures


【解决方案1】:

使用array_diff,您应该始终将缺少值的数组放在第一位,否则它不会返回任何内容。

它也看不到第一个数组。所以这样的事情会起作用:

$diff = array_diff_assoc($arr2["colorFamily"], $arr1["colorFamily"])

您还可以使用以下内容。 array_map 用于索引键:

$missing = array_map('unserialize', array_diff(array_map('serialize', $arr2), array_map('serialize', $arr1)));

(学分:Use array_diff_assoc() or get difference of multidimensional arrays

【讨论】:

  • 你好,我的场景对比可以是n层多维数组。我已经测试了您的解决方案,但它确实符合我的要求。
  • 啊耻辱。也许你应该循环它们而不是使用 array_diff,因为它的用例非常有限
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-17
  • 2014-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-16
  • 1970-01-01
相关资源
最近更新 更多