[PHP / SQL ] - Durch "," getrennte Strings in Array?



  • Hallo Zusammen

    Ich lese einen String, der folgendermassen in einer SQL-DB gespeichert ist aus:

    1a,2b,3e,5f

    Diese Zeichenkette möchte ich nun in einen Array unterbringen:

    $result = mysql_query("SELECT berechtigung FROM Tabelle WHERE PersNr=1");
     $array_inhalt = mysql_fetch_array($result);
    $berechtigung = array($array_inhalt['berechtigung']);
    

    So weit so gut. Jetzt steht in $berechtigung folgendes:

    $berechtigung = array(1a,2b,3e,5f);
    

    .

    Wenn ich aber nun nach einem String zb. 1a oder 2b suchen möchte, geht das nicht, da diese ja in Anführungszeichen stehen müssten also so:

    $berechtigung = array("1a","2b","3e","5f");
    

    Meine Frage: Wie kriege ich es nun hin, dass die einzelnen Strings in Anführungszeichen gesetzt werden (nach dem Auslesen) damit auch das Überprüfen mittels IF-Abfrage (folgend) funktioniert? STR-REPLACE kann ich schleecht benutzen, da ja vor dem 1 kein komma ist... 😉

    if(in_array("2b", $berechtigung))
    					{
    					$text  = "Berechtigung für 1a OK!<br />";
    					}
    ... usw....
    

    Kennt da wer einen WEg?

    lg
    Wolf



  • Hallo,

    $result = mysql_query("SELECT berechtigung FROM Tabelle WHERE PersNr=1"); 
     $array_inhalt = mysql_fetch_array($result); 
    $berechtigung = array($array_inhalt['berechtigung']);
    

    So weit so gut. Jetzt steht in $berechtigung folgendes:

    $berechtigung = array(1a,2b,3e,5f);
    

    Nein, das stimmt so nicht. Es gilt
    $berechtigung = array(0 => array(0 => "1a,2b,3e,5f", 'berechtigung' => "1a,2b,3e,5f"))

    Deine gesamte Fragestellung verstehe ich nicht, sorry. Du liest einen String aus einer Datenbank, also hast du überhaupt kein Problem mit irgendwelchen doppelten Hochkommata. Ich denke, hier mangelt es dir entweder akut an Grundlagenwissen oder an der Fähigkeit, dein Problem treffend zu beschreiben 😉

    Ich vermute, du möchtest nun prüfen können, ob eine bestimmte Berechtigung vorliegt? Dann wäre ein möglicher Ansatz:

    if(strpos($berechtigung, '2b'))
    

    Nähere Informationen liefert das PHP-Manual:
    http://de3.php.net/manual/de/function.strpos.php

    Willst du hingegen die einzelnen Berechtigungen so in ein Array teilen, dass du die von dir genannte Struktur bekommst:
    $berechtigung => array( 0 => '1a', 1 => '2b', 2 => '3e', 3 => '5f')
    dann schaue dir einmal die Funktion explode an:
    http://de3.php.net/manual/de/function.explode.php

    Beste Grüße,
    árn[y]ék



  • Danke, half mir nicht weiter. Ich hatte wohl das Problem falsch beschrieben.

    Aber habe es nun ohne Array lösen können. Ein prge_macht() hilft hier auch durchaus vollkommen aus... 😉

    Danke



  • Eieiei...

    Also noch einmal ganz ausführlich 😉

    $result = mysql_query('SELECT berechtigung FROM Tabelle WHERE PersNr = 1 LIMIT 1');
    $array_inhalt = mysql_fetch_array($result); 
    $berechtigung = $array_inhalt['berechtigung'];
    

    Danach gilt:
    $berechtigung = '1a,2b,3e,5f'; // gettype($berechtigung) = string

    Die elementare Frage ist nun: Was willst du damit machen? Und warum?
    Willst du die einzelnen Berechtigungen (1a, 2b, 3e, 5f) in ein Array aufsplitten, in dem jeder Arrayindex eine der Berechtigungen enthält? Dann nimmst du dafür explode:

    $berechtigung = explode(',', $berechtigung);
    

    Danach gilt:
    $berechtigung = array(0 => '1a', 1 => '2b', 2 => '3e', 3 => '5f');

    Du sagst, du willst 1a, 2b, 3c nach "1a", "2b", "3c" umwandeln. Wieso? Ich sehe keinen Sinn dahinter. Aus deinem Beitrag erkenne ich, dass du prüfen willst, ob eine der Berechtigungen vorliegt (sprich 1a, 2b, 3c etc. jeweils im String enthalten sind). Dafür brauchst du deinen String nicht umzuformen.

    Falls es aber auf Teufel komm raus sein muss (aus einem Grund, der aus deiner Aufgabenstellung nicht hervor geht):

    $berechtigung = explode(',', $berechtigung);
    foreach($cnt = 0; $cnt < count($berechtigung); ++$cnt)
       $berechtigung[$cnt] = '"'.$berechtigung[$cnt].'"';
    $berechtigung = implode(', ', $berechtigung);
    

    Danach gilt, wie von dir gefordert:
    $berechtigung = '"1a", "2b", "3e", "5f"'; // gettype($berechtigung) = string

    Beste Grüße


Anmelden zum Antworten