2015-09-30 82 views
0

底线,我有一个巨大的多维数组返回ldap_get_entries,我试图根据位置属性解析到不同的组。从数组基于值获取记录

在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子句吗?因此,我可以将具有匹配键值的数组中的所有记录分配给变量1,并将具有不同匹配键值的数组中的所有记录分配给变量2。

我假设我正在以业余脚本方式解决此问题。如果有更简单的方法来完成此任务(可能会跳过赋值记录到变量部分),或任何类型的“最佳做法”,我缺少在这里,我渴望学习它。

在此先感谢!

回答

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>'; 
} 

这将首先把第一个条目的条目作为数组的键的位置属性。然后可以使用该键对数组进行排序。

要输出内容,它会迭代新数组并对内容进行排序 - 在本例中使用uid属性的第一个值(将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> 

确实看起来像它可以帮助你吗?

+0

它看起来像我们在这里的东西。我将不得不考虑这些概念,并看看我能否让他们为我的情况工作。 – Cody

+0

你可以用最蹩脚的词语解释foreach($ records as $ record)和foreach($ recordsSorted as $ location => $ records)之间的区别。来自Powershell,我不确定我是否理解这两个foreach结构之间的区别。 – Cody

+0

前者将数组$ record中的每个项目分配给变量$ record。后者做同样的事情,但也将条目的数组键(在本例中是''''''''属性的值)赋值给变量$ location。有关PHP的关联数组的更多信息,请参见http://php.net/manual/en/language.types.array.php – heiglandreas