2015-09-30 127 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