2016-03-23 15 views
1

Ich versuche strposa zu verwenden, um einen Teil einer Schleife zu stoppen, die continue verwendet, wenn es eine Übereinstimmung in dem Array findet. Das Problem ist, wenn es einen Bezug zu einer Ziffer in dem Code findet, der gerade endet, anstatt mit der tatsächlichen Eingabe übereinzustimmen.PHP Strposa einstellige zwei- und dreistellige Ziffern

I.e. Wenn es 6 in 163 findet, stoppt es. Gibt es sowieso, um es spezifisch zu machen.

function strposa($haystack, $needle, $offset = 0) { 
    if (!is_array($needle)) { 
     $needle = array($needle); 
    } 
    foreach ($needle as $query) { 
     if (stripos($haystack, $query, $offset) !== false) { 
      return true; // stop on first true result 
     } 
    } 
    return false; 
} 


$StaffGroups = array (0 => '76', '6', '13', '16', '154', '69'); 

$ServerGroups = explode(",", $Info['client_servergroups']); 

if (strposa($ServerGroups, $StaffGroups, 1)) { 
    echo "User is staff"; 
    Continue; 
} else { 
    echo "User is not staff"; 
} 

Die Arrays wie folgt aussehen, wenn Sie fertig:

$StaffGroups([0] => 76 [1] => 6 [2] => 13 [3] => 16 [4] => 154 [5] => 69) 
$ServerGroups ([0] => 69 [1] => 163) 

jede mögliche Hilfe schätzen würde, wirklich im Moment stecken! Entschuldigung, wenn ich etwas beantwortet habe, das bereits beantwortet wurde, aber mir fällt keine gute Möglichkeit ein, danach zu suchen.

+1

Wie wollen Sie * die Ausgabe aussehen? –

+0

Ich bin nicht wirklich sicher, ich brauche es nur, um eine 6 als 6 zu behandeln, anstatt die 6 in 163 zu markieren, damit ich diesen Code beenden kann. – Patrick

+0

Was ist die Frage/Problem jetzt? – Rizier123

Antwort

1

Es scheint, als ob Sie verkomplizieren versuchen zu bestimmen, ob eine gegebene needle für eine gegebene haystack existiert. In diesem Fall ist Ihr Heuhaufen die Personalgruppe und die Nadel ist jedes Element der Servergruppen.

$StaffGroups = array (0 => '76', '6', '13', '16', '154', '69'); 
$ServerGroups = explode(",", $Info['client_servergroups']); 

foreach ($ServerGroups as $user => $user_id) { 
    if (in_array($user_id, $StaffGroups)) { 
    echo "User is staff"; 
    } else { 
    echo "User is not staff"; 
    } 
} 

in $ServerGroups Für jedes Element, das Sie überprüfen, um zu sehen, ob es in $StaffGroups und drucken Sie die entsprechende Meldung vorhanden: Sie können und in_array verwenden ganz loswerden Ihre benutzerdefinierte Funktion erhalten.

+0

Ich habe das versucht und es scheint nicht das Echo zu mögen "User is staff"; "Syntaxfehler, unerwartetes Echo '(T_ECHO)" – Patrick

+0

Tippfehler! Siehe Überarbeitung. –

+0

Das scheint zunächst zu funktionieren, ist es trotzdem, ich kann es weiter machen die foreach es läuft gerade anstatt nur die, die Sie erstellt haben, so dass es stoppt foreach und die, in der es ist .. wenn das Sinn macht? – Patrick

0

Wenn Sie die genaue Zahl übereinstimmen möchten, müssen Sie == anstelle von Stripos verwenden. Zum Beispiel:

function strposa($haystack, $needle, $offset = 0) { 
    if (!is_array($needle)) { 
     $needle = array($needle); 
    } 
    foreach ($needle as $query) { 
     if ($haystack == $query) { 
      return true; // stop on first true result 
     } 
    } 
    return false; 
} 
0

Sie suchen nach gemeinsamen Werten in zwei Arrays, die was array_intersect() ist gemacht für:

<?php 
$StaffGroups = array(76,6,13,16,154,69); 
$ServerGroups = array(69,163); 

function userIsStaff($ServerGroups, $StaffGroups) { 
    $common = array_intersect($ServerGroups, $StaffGroups); 
    return count($common) > 0; 
} 

if (userIsStaff($ServerGroups, $StaffGroups, 1)) { 
    echo "User is staff"; 
} else { 
    echo "User is not staff"; 
} 

Aber ich verstehe nicht die Bedeutung Ihrer param $offset ...

Verwandte Themen