最重要的是,我有一个由 ldap_get_entries 返回的巨大的多维数组,我试图根据location属性解析到不同的组。
在PowerShell中我可以做类似的事情:
$location1 = Get-ADUser -Filter * | ? {?_.l -eq "test_location"}
我目前在PHP中做的事情(就我的大脑让我走的那样)是这样的:
Foreach ($records as $record) {
if (isset($record['l'])) {
switch ($record['l'][0]) {
case "test_location1":
$location1[] = $record;
continue 2;
case "test_location2":
$location2[] = $record;
continue 2;
}
}
}
然后我使用 foreach 循环(替代语法)对我使用上述方法的位置变量数组($ location1,$ location2)将记录排序到适当的位置变量中。通过这种方式,我构建了一个HTML表,将每个位置记录组合在一起。我为每个位置构建了一个新表,每个组之间都有一些HTML代码,所以我不相信按位置排序ldap结果会有效,因为它会输出一个大表。
有没有办法在PHP中指定WHERE子句?这样我就可以将具有匹配键值的数组中的所有记录分配给variable1,并将具有不同匹配键值的数组中的所有记录分配给variable2。
我假设我正在以业余脚本方式解决这个问题。如果有一种更简单的方法来完成这项任务(可能会跳过分配记录到变量部分),或者任何类型的"最佳实践&#34 ;我在这里失踪,我正在学习它。
提前致谢!!
答案 0 :(得分:0)
据我了解你的问题,你想要这样的事情:
$recordsSorted = array();
foreach ($records as $record) {
if (! isset($record['l'])) {
continue;
}
$recordsSorted[$records['l'][0]][] = $record;
}
ksort($recordsSorted);
foreach($recordsSorted as $location => $records) {
usort($records, function($a, $b){
return strnatcasecmp($a['uid'][0], $b['uid'][0]);
});
echo '<h1>$location</h1><ul>';
foreach ($records as $record) {
echo '<li>' . $record['dn'] . '</li>';
}
echo '</ul>';
}
这将首先将条目的location-attribute的第一个条目作为数组的键。然后可以使用该密钥对数组进行排序。
要输出内容,它会迭代新数组并对内容进行排序 - 在这种情况下使用uid-attribute的第一个值(将uid
更改为您需要的任何属性)。然后将此已排序的内容输出到HTML。
第一个数组$recordsSorted
可能看起来像这样:
array(
'London' => array(
array(<entry from the LDAP>),
array(<another entry from LDAP>),
),
'Paris' => array(
array(<a further entry from the LDAP>),
),
'Berlin' => array(
array(<and even another entry from the LDAP>),
),
);
结果看起来有点像这样:
<h1>Berlin</h1>
<ul>
<li>[UID of and even another entry from the LDAP]</li>
</ul>
<h1>London</h1>
<ul>
<li>[UID of another entry from LDAP]</li>
<li>[UID of entry from the LDAP]</li>
</ul>
<h1>Paris</h1>
<ul>
<li>[UID of a further entry from the LDAP]</li>
</ul>
这看起来对你有帮助吗?