2017-06-10 3 views
0

Ich möchte den Schlüssel der ersten Ebene eines mehrdimensionalen Arrays basierend auf dem Wert einer der Unterebenen zurückgeben.Return-Taste des Array der obersten Ebene, wenn ein bestimmter Wert in der Unterebene des mehrdimensionalen Arrays enthalten ist

Zum Beispiel, wenn ich '@ google.com' als 'Admin E-Mails' zur Verfügung stelle, möchte ich 'Google' zurückgeben.

Mein Array ist unten.

$array = array (
    'Google' => array (
      'Allowed Emails' => array ('@google.com','@gmail.com'), 
      'Admin Emails' => '[email protected], [email protected]', // This really is supposed to be a String, not an array 
      'Company Name' => 'Alphabet', 
      'Memberships' => array ('websites', 'google'), 
), 
    'Facebook' => array (
      'Allowed Emails' => array ('@facebook.com','@facebook.co.uk'), 
      'Admin Emails' => '[email protected], [email protected]', 
      'Company Name' => 'Facebook Limited', 
      'Memberships' => array ('websites', 'facebook'), 
), 
    'Apple' => array (
      'Allowed Emails' => array ('@apple.com','@icloud.com'), 
      'Admin Emails' => '[email protected]', 
      'Company Name' => 'Apple Inc', 
      'Memberships' => array ('computers', 'apple'), 
), 
     'Dell2' => array (
      'Allowed Emails' => array ('@dell.com'), 
      'Admin Emails' => '[email protected]', 
      'Company Name' => 'Dell Computers', 
      'Memberships' => array ('computers', 'dell'), 
) 
); 

Ich habe es geschafft, einen langen Weg, um mit array_filter aber die unten funktioniert nur, wenn die Variable I (in diesem Fall ‚google.com‘) festgelegt haben, in dem Array die erste Variable ist.

Alle Gedanken sehr geschätzt.

function setitem ($item){ return $item['Allowed Emails'][0] === '@google.com' ;} 

$filteredarray = array_filter($array, setitem); 


$toplevelarray = array_keys($filteredarray); 

echo $toplevelarray[0]; 

Auch ich brauche etwas Hilfe die Variable vorbei (in diesem Fall ‚@ google.com‘ in die ‚SetItem‘ -Funktion, da dies nicht schwer in codiert werden. Aus irgendeinem Grund habe ich einen Fehler, wenn ich versuche, und tun es die normale Art und Weise

Vielen Dank im Voraus

Antwort

1

Nichts Besonderes, das zu tun..

$result = []; 
foreach ($array as $k => $v) { 
    if (in_array('@google.com', $v['Allowed Emails'])) 
     $result[] = $k; 
} 

print_r($result); 

Wenn Sie bereits wissen, dass der Schlüssel ist einzigartig Verwendung eine Zeichenfolge anstelle eines Array für $result und verwenden Sie break, um die Schleife zu stoppen.

Sie können das gleiche mit array_filter oder array_reduce tun, aber es ist langsamer.

Um eine Variable an eine Funktion zu übergeben, nichts magisches noch einmal: fügen Sie einen Parameter hinzu.

+0

Das ist großartig. Danke Casimir. –

+0

Wenn ich alle 'Zugelassenen E-Mails' in ein neues Array zusammenführen möchte (im Wesentlichen, was das Folgende drucken würde), gibt es eine einfache Möglichkeit, dies zu tun? 'foreach ($ array als $ k => $ v) { print_r ($ v ['Erlaubte E-Mails']); } ' –

+0

Dies scheint zu funktionieren, um meine zweite Abfrage zu lösen - ist das eine elegante Lösung? Danke '$ result = []; foreach ($ array als $ k => $ v) { $ result [] = $ v ['Erlaubte E-Mails']; } $ ergebnis = array_reduce ($ result, 'array_merge', array()); print_r ($ result); ' –

Verwandte Themen