2013-10-11 2 views
1

Я хочу получить значение «GUID» со значением «SamAccountName». т. е. у меня есть только значение 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, например. mario, и вы хотите функцию, которая возвращает guid из того же массива, который вы знаете, SamName - это mario? – Soundz

+0

Да, это то, что мне нужно. Так, например, csliney_playgroundla должен вернуть 71224be8-1b8b-46e7-97ef-2cd873bf9b7f – Dru

ответ

1

Похоже, вы хотите получить часть GUID для значения «SamAccountName». Используйте цикл Еогеасп:

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 соответствующего массива и false, если он не может найти массив с соответствующим именем SamAccountName.

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

, откуда приходит '$ yourArray'? – Soundz

+0

хорошо catch. который научит меня пытаться реорганизовать мой код в редакторе 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"]; 
} 

Не очень элегантное решение ... но он должен работать.

Смежные вопросы