0

我正在尝试将 SQL 查询中的数组与 LDAP 搜索数组进行比较。我是否需要将 LDAP 数组(我相信它是多维的)的格式更改为关联数组?

我要比较的是 Active Directory 的工资表。这是为了帮助解雇不再为公司工作的员工。此外,这将导致一种轻松将员工编号输入 AD 的方法,因为工资表包含所有员工编号。

我的 sql 数组如下所示:

[0] => Array (
     [employeenumber] => 99999999999 
     [givenname] => JOHN 
     [sn] => BOSS 
     [mail] => 
     [useraccountcontrol] => 
     [displayname] =>)  <--Each Entry appears like this

我将最后 3 列/键添加到数组中,因为它们在 sql 数据库中不存在。我想让它们具有与 LDAP 数组相同的键,以便我可以比较它们。

但我的 LDAP 阵列是....方式不同。我什至不知道从哪里开始/停止数组的每个部分。

它看起来像这样:

[162] => Array ( 
     [sn] => Array ( 
          [count] => 1 [0] => Doe) 
      [0] => sn [givenname] => Array ( 
          [count] => 1 [0] => John) 
      [1] => givenname [displayname] => Array ( 
          [count] => 1 [0] => John Doe ) 
      [2] => displayname [employeenumber] => Array ( 
          [count] => 1 [0] => 99999 ) 
      [3] => employeenumber [useraccountcontrol] => Array ( 
          [count] => 1 [0] => 66048 ) 
      [4] => useraccountcontrol [mail] => Array ( 
          [count] => 1 [0] => john.doe@email.com ) 
      [5] => mail [count] => 6 [dn] => CN=John Doe,CN=Users,DC=abc,DC=com )

我是否需要使 LDAP 数组与 SQL 数组具有相同的格式,如果需要,我该怎么做?此外,并非 LDAP 数组中的所有条目都包含有关员工编号的部分。只有几个人输入了他们的员工编号,如果他们在 AD 中没有一个,我猜它只会将该部分排除在数组之外。

另外我想做的是创建一个表,它将比较这两个数组。我希望它列出 SQL 数组中的每个人以及 LDAP 数组中的每个人(全部按姓氏排序,因为某些 SQL 名称具有不同的名字,例如 LDAP 中有 Michael 的 Mike)。如果此人在 LDAP 数组中但在 SQL 数组中没有相对匹配,我还希望该行突出显示某种颜色。我还需要它来检查员工编号是否匹配,如果匹配,我只希望它显示来自 LDAP 数组的条目,而不是 SQL 数组条目。

这样,通过表格的显示方式,如果我在 AD 中找到一个没有员工编号的人,我可以将其输入 AD,然后表格将只显示该人的 AD 条目。

最终,我想修改该页面,以便您可以通过这一页面主动更改/添加/删除 Active Directory 中的人员。但这超出了该项目的当前范围。

如果您需要更多信息,请询问。我不允许发布我当前的所有代码,因为它违反了公司政策,但我可以发布一般知识的部分(例如我如何进行 LDAP 搜索等)。我只需要修改某些方面来隐藏我们的信息/表名/IP 等。

编辑

在朋友的帮助下,我能够弄清楚。我不得不重组我的代码并在 foreach 循环中创建一个 foreach 循环并使用数组推送。

一般来说,我做了以下事情:

foreach($LDAPARRAY as $value){
   foreach($SQLARRAY as $key => $data){
      if($data['employeenumber'] = $value['employeenumber']){
         unset($SQLARRAY[$key]);
      }
   }
}
array_push($LDAPARRAY, $SQLARRAY); 

我还针对 LDAP 数组做了一个类似的过程,以使其摆脱它所处的那种愚蠢的格式。我首先对 LDAP 数组进行了处理,以将数组规范化为可接受的格式(与 SQL 数组的格式相同)在)。然后我能够执行上面的代码,比较和组合数组。如果员工编号匹配,我只会看到来自 LDAP 阵列的条目(因为 SQL 阵列已从阵列中删除了相应的条目)。

我现在可以将新的组合数组打印到表中,并且只查看具有员工编号的条目(来自 sql 表)和没有员工编号的 AD 条目。我仍在尝试找出可以从 SQL 表中使用的字段,该字段可以与 AD 条目匹配,以查找在 AD 中但不在 SQL 表中的人。如果您对此有任何建议,那就太好了。

4

0 回答 0