从基于值

时间:2015-09-30 02:19:08

标签: php arrays ldap

最重要的是,我有一个由 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 ;我在这里失踪,我正在学习它。

提前致谢!!

1 个答案:

答案 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>

这看起来对你有帮助吗?