我正在尝试将 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 表中的人。如果您对此有任何建议,那就太好了。