2012-04-11 12 views
3

Mein Problem ist:Passende mehr Werte gegen eine Anordnung

Ich habe ein Array namens $ ownerArray, dass ein anderes Array überprüfen muß gegen und wenn ein Schlüssel vorhanden ist in beiden Arrays den Wert des passenden Schlüssels anzuzeigen. $ ownerArray wird von einer Datenbank gefüllt, so dass ich nicht einfach eine ir-Anweisung innerhalb einer if-Anweisung schreiben kann.

$ ownerArray wird wie folgt aussehen:

$ownerArray = array(0 =>'Name0',1 =>'Name1',2 =>'Name2',3 =>'Name3'); 

Dann habe ich ein anderes Array $ Users genannt, die eine verschiedene Anzahl von Werten je nachdem, was der Benutzer auswählt hat, so könnte $ Nutzer wie folgt aussehen:

$Users = '1,2' 

oder So:

$Users = '1,3' 

Benutzer $ ist nie gleich.

Aber ich brauche den $ Wert von $ ownerArray angezeigt werden, wenn eine der Wert ganzen Zahlen von $ Users jeden $ Schlüssel ownerArray

$ entspricht

Beispiel:

foreach($ownerArray as $key => $value) 
      { 
       if(in_array($key,array($Users))) 
       { 
        print $value; 
       } 
      } 

Diese Methode an der Faust hält Übereinstimmung und zeigt den korrekten Namen an. Die Schleife wird nicht weiter gedruckt, wenn mehr Werte übereinstimmen.

Was ich suche ist, wenn $ Users = '1,3' meine for-Schleife wird Name1 und Name3 aus dem $ ownerArray drucken.

Danke für die Hilfe!

ps ich weiß, ich könnte verwenden, wenn ($ key == 1 || $ key == 2), aber das wird nicht für diesen Fall funktionieren.

Antwort

4
$merged = array_flip(array_intersect(array_flip($owners), explode(',', $users))); 
+0

One Liner FTW !!! – rdlowrey

+0

Ich mache diese Art der Sache die ganze Zeit. +1 –

+0

'$ merged = array_flip (array_intersect (array_flip ($ besitzer), explode (',', $ user)));' kein spacer FTW –

1

so etwas wie dies funktionieren könnte

<?php 

$ownerArray = array(0 =>'Name0',1 =>'Name1',2 =>'Name2',3 =>'Name3'); 
$users = explode(',','1,2'); 

if(count($users) > 0){ 
    foreach($users as $user){ 
     if($key = array_search($user,$ownerArray)){ 
      echo $key; 
     } 
    } 
} 


?> 
0

Sie Ihre Logik invertieren. Sie möchten tatsächlich durch Ihre Benutzer navigieren und etwas drucken, wenn sie im Besitzer-Array vorhanden sind, und nicht umgekehrt. (Entschuldigt, wenn dieser Code ist leicht ab, aber Sie diese Idee.)

foreach($Users as $value) 
{ 
    if(in_array($value,array($ownerArray))) 
    { 
    print $ownerArray[$value]; 
    } 
} 
Verwandte Themen