使用array_diff_assoc()或获取多维数组的差异

Smo*_*een 5 php arrays multidimensional-array

我一直在努力解决我认为现在应该是一个非常简单的问题,而且无法解决问题.

我有两个数组,这些数组包含有关id,linklabel和url的信息,格式如下:

$pageids
--------
Array ( 
[0] => Array 
( [id] => 1 
  [linklabel] => Home 
  [url] => home )

[1] => Array 
( [id] => 2 
  [linklabel] => Graphic Design 
  [url] => graphicdesign ) 

[2] => Array 
( [id] => 3 
  [linklabel] => Other Design 
  [url] => otherdesign ) 

[3] => Array 
( [id] => 6 
  [linklabel] => Logo Design 
  [url] => logodesign ) 

[4] => Array 
( [id] => 15 
  [linklabel] => Content Writing 
  [url] => contentwriting ) 
) 


$parentpage
-----------
Array ( 
[0] => Array 
( [id] => 2 
  [linklabel] => Graphic Design 
  [url] => graphicdesign ) 

[1] => Array 
( [id] => 3 
  [linklabel] => Other Design 
  [url] => otherdesign ) ) 
Run Code Online (Sandbox Code Playgroud)

我现在正在尝试比较这两个,以便找到$pageids但不在的信息$parentpage- 这将构成另一个被调用的数组$pageWithNoChildren.但是,当我使用以下代码时:

$pageWithNoChildren = array_diff_assoc($pageids,$parentpage);
Run Code Online (Sandbox Code Playgroud)

array_diff_assoc()阵列上的第一级运行,并因此认为,这两个$pageids$parentpages具有[0]和[1]键,因此忽略它们,并返回从所有的信息$pageids从[2]开始.但是我希望它能够查看嵌套数组的内容并比较这些内容,例如我需要它来查看哪个id,linklabel和url都在,$pageids而不是$parentpages返回这些值.

如何array_diff_assoc()在嵌套数组的键上运行而不是第一个数组的键,所以最终结果是一个包含[0],[3]和[4]数组内容的数组$pageids

Abr*_*ver 17

要检查多个deminsions尝试这样的事情:

$pageWithNoChildren = array_map('unserialize',
    array_diff(array_map('serialize', $pageids), array_map('serialize', $parentpage)));
Run Code Online (Sandbox Code Playgroud)
  • array_map() 通过运行主阵列的每个子阵列 serialize()
  • serialize() 将每个子数组转换为该子数组的字符串表示形式
  • 主数组现在具有的值不是数组,而是子数组的字符串表示形式
  • array_diff() 现在有一个一维数组用于每个要比较的数组
  • 返回差异后,array_map()运行数组结果(差异)unserialize(),将字符串表示形式转换回子数组

QED