2013-10-11 37 views
1

我想用'SamAccountName'的值來獲取'GUID'的值。即我只有pf'SamAccountName'的值,我想爲該部分的數組獲取'GUID'的值。查找嵌套關聯數組中的值

Array 
(
    [0] => Array 
    (
     [DistinguishedName] => [email protected],OU=playgroundla,OU=Hosting,DC=exch024,DC=domain,DC=local 
     [GUID] => 26d7c204-7db7-4601-8cd2-0dd0d3b37d97 
     [OriginatingServer] => dcprov024-CA-1.exch024.domain.local 
     [Name] => [email protected] 
     [HostingObjectType] => Array 
      (
       [HostingObjectTypes] => Array 
        (
         [0] => ActiveSync 
         [1] => MSExchange2007Mailbox 
         [2] => ActiveDirectoryUser 
        ) 

      ) 

     [HostingOwners] => Array 
      (
       [HostingObjectOwners] => Array 
        (
         [0] => MSExchange2007Mailboxes 
         [1] => ActiveDirectoryUsers 
        ) 

      ) 

     [Attributes] => Array 
      (
       [Hidden] => 
       [ReadOnly] => 
       [SpecialAccess] => 
       [Items] => Array 
        (
        ) 

      ) 

     [DisplayName] => John Nolan 
     [SamAccountName] => johnn_playgroundla 
     [FullSamAccountName] => EXCH024\johnn_playgroundla 
     [UserPrincipalName] => [email protected] 
     [AccountExpires] => 
     [Enabled] => 
     [EnabledFeatures] => Array 
      (
       [string] => Array 
        (
         [0] => ActiveSync 
         [1] => MSExchangeMailboxes 
         [2] => ActiveDirectoryUsers 
        ) 

      ) 

     [LastLogonTimestamp] => 
    ) 

[1] => Array 
    (
     [DistinguishedName] => [email protected],OU=playgroundla,OU=Hosting,DC=exch024,DC=domain,DC=local 
     [GUID] => 71224be8-1b8b-46e7-97ef-2cd873bf9b7f 
     [OriginatingServer] => dcprov024-CA-1.exch024.domain.local 
     [Name] => [email protected] 
     [HostingObjectType] => Array 
      (
       [HostingObjectTypes] => Array 
        (
         [0] => ActiveSync 
         [1] => MSExchange2007Mailbox 
         [2] => ActiveDirectoryUser 
        ) 

      ) 

     [HostingOwners] => Array 
      (
       [HostingObjectOwners] => Array 
        (
         [0] => MSExchange2007Mailboxes 
         [1] => ActiveDirectoryUsers 
        ) 

      ) 

     [Attributes] => Array 
      (
       [Hidden] => 
       [ReadOnly] => 
       [SpecialAccess] => 
       [Items] => Array 
        (
        ) 

      ) 

     [DisplayName] => Christopher Sliney 
     [SamAccountName] => csliney_playgroundla 
     [FullSamAccountName] => EXCH024\csliney_playgroundla 
     [UserPrincipalName] => [email protected] 
     [AccountExpires] => 
     [Enabled] => 
     [EnabledFeatures] => Array 
      (
       [string] => Array 
        (
         [0] => ActiveSync 
         [1] => MSExchangeMailboxes 
         [2] => ActiveDirectoryUsers 
        ) 

      ) 

     [LastLogonTimestamp] => 
    ) 

[2] => Array 
    (
     [DistinguishedName] => [email protected],OU=playgroundla,OU=Hosting,DC=exch024,DC=domain,DC=local 
     [GUID] => b428b57f-4cd4-4243-a76a-f25f5ff3be97 
     [OriginatingServer] => dcprov024-CA-1.exch024.domain.local 
     [Name] => [email protected] 
     [HostingObjectType] => Array 
      (
       [HostingObjectTypes] => Array 
        (
         [0] => MSExchange2007Mailbox 
         [1] => ActiveDirectoryUser 
        ) 

      ) 

     [HostingOwners] => Array 
      (
       [HostingObjectOwners] => Array 
        (
         [0] => MSExchange2007Mailboxes 
         [1] => ActiveDirectoryUsers 
        ) 

      ) 

     [Attributes] => Array 
      (
       [Hidden] => 
       [ReadOnly] => 
       [SpecialAccess] => 
       [Items] => Array 
        (
        ) 

      ) 

     [DisplayName] => Lee Roderick 
     [SamAccountName] => lee_playgroundla 
     [FullSamAccountName] => EXCH024\lee_playgroundla 
     [UserPrincipalName] => [email protected] 
     [AccountExpires] => 
     [Enabled] => 
     [EnabledFeatures] => Array 
      (
       [string] => Array 
        (
         [0] => MSExchangeMailboxes 
         [1] => ActiveDirectoryUsers 
        ) 

      ) 

     [LastLogonTimestamp] => 
    ) 

[3] => Array 
    (
     [DistinguishedName] => [email protected],OU=playgroundla,OU=Hosting,DC=exch024,DC=domain,DC=local 
     [GUID] => 4b2aee17-9e88-4de9-b95b-63a9877835a6 
     [OriginatingServer] => dcprov024-CA-1.exch024.domain.local 
     [Name] => [email protected] 
     [HostingObjectType] => Array 
      (
       [HostingObjectTypes] => Array 
        (
         [0] => ActiveSync 
         [1] => MSExchange2007Mailbox 
         [2] => ActiveDirectoryUser 
        ) 

      ) 

     [HostingOwners] => Array 
      (
       [HostingObjectOwners] => Array 
        (
         [0] => MSExchange2007Mailboxes 
         [1] => ActiveDirectoryUsers 
        ) 

      ) 

     [Attributes] => Array 
      (
       [Hidden] => 
       [ReadOnly] => 
       [SpecialAccess] => 
       [Items] => Array 
        (
        ) 

      ) 

     [DisplayName] => Theresa Baker 
     [SamAccountName] => theresa_playgroundla 
     [FullSamAccountName] => EXCH024\theresa_playgroundla 
     [UserPrincipalName] => [email protected] 
     [AccountExpires] => 
     [Enabled] => 
     [EnabledFeatures] => Array 
      (
       [string] => Array 
        (
         [0] => ActiveSync 
         [1] => MSExchangeMailboxes 
         [2] => ActiveDirectoryUsers 
        ) 

      ) 

     [LastLogonTimestamp] => 
    ) 
) 

這本來是一個stdClass的對象,但我用json_decode(json_encode($ OBJ),真)轉換爲一個關聯數組。

+0

只是爲了讓這個權利:你有SamName例如馬里奧,你想要一個函數返回相同數組的GUID,你知道SamName是馬里奧? – Soundz

+0

是的,這就是我需要的。因此,例如csliney_playgroundla應該返回71224be8-1b8b-46e7-97ef-2cd873bf9b7f – Dru

回答

1

聽起來像是想要獲取'SamAccountName'值的GUID部分。使用foreach循環:

function getGUID($san, $array) { 
    foreach($array as $a) { 
     if($a['SamAccountName'] == $san) { 
      return $a['GUID']; 
     } 
    } 
    return false; 
} 

$guid = getGUID("SamAccountNameHere", $yourArray); 
+0

非常感謝。比我想象的要簡單得多。 – Dru

0

下面是一個您可以使用的函數示例。這假定只有一個對象具有您在數組中提供的SamAccountName(它只是使用它找到的第一個對象)。它返回匹配數組的GUID,如果找不到具有匹配SamAccountName的數組,則返回false。

function getGuidForSamAccountName($arr, $name) { 
    foreach ($arr as $elem) { 
     if ($elem['SamAccountName'] === $name) { 
      return $elem['GUID']; 
     } 
    } 
    return false; //No match found 
} 
+0

哪裏出現'$ yourArray'? – Soundz

+0

好抓。那會教會我嘗試在SO編輯器中重構我的代碼! – Andrew

+0

是的,沒有硬的感覺,只是因爲我們有相同的想法而引起了我的注意 – Soundz

1

您可以使用一個簡單的循環去取

$id = 0; 
foreach($data as $item) { 
    if (isset($item['SamAccountName']) && 'accountName' == $item['SamAccountName']) { 
    $id = $item['GUID']; 
    break; 
    } 
} 
var_dump($id); 
1

這是你在找什麼?

function findBySam($arrayList, $sam) { 

    foreach($arrayList as $array) { 
     if($array['SamAccountName'] == $sam) { 
     return $array; 
     } 
    } 
    return false; 
} 
0

可以使用array_filter函數PHP的: http://php.net/manual/en/function.array-filter.php

例如:

$GUID = "sample"; 
array_filter($array, "findElement"); 
function findElement($el) { 
return $el["GUID"] == $_GLOBAL["GUID"]; 
} 

不是一個非常優雅的解決方案......但它應該工作。