[PHP] Wert an Stelle 0 aus normalen Array als assoziativen Index benützen?



  • Ich bekomme aus der Datenbank Werte in folgender Form:

    // Query:
    SELECT key, value FROM tabelle;
    
    // Result:
    Array[0] -> ( 'Key0' , 'Value0' )
    Array[1] -> ( 'Key1' , 'Value1' )
    

    Daraus möchte ich jetzt ein assoziatives Array erstellen, dass jeweils den Key als Index benützt. Also:

    Array['Key0'] -> 'Value0'
    Array['Key1'] -> 'Value1'
    

    Gibt es dafür eine vorgefertigte Methode? Zumindest eine performantere Lösung als ein neues Array anzulegen und die Werte zu kopieren?

    MfG SideWinder



  • Soweit ich gemäß meiner Erfahrung mit SQL urteilen kann, würde ich sagen, dass SQL keinen Weg bietet ein assoziatives Array zu erstellen. SQL gibt eben nur Zeilen mit Spalten und Werten aus. PHP bietet aber mit mysql_fetch_assoc einen Weg an eine Zeile als assoziatives Array aufzubereiten.

    Würde bei deiner Query so aussehen:

    SELECT key, value FROM tabelle;
    //Result:
    $row['key'] enthält den Wert der Spalte 'key'
    $row['value'] --"-- 'value'
    

    Das ist aber auch nicht so ganz das was du willst. Ich würde folgende Query vorschlagen:

    SELECT CONCAT_WS(',',key,value) FROM tabelle;
    //Beispielzeilen:
    -> 'key0,value0'
    -> 'key1,value1'
    

    Jetzt hast du im Prinzip einen verknüpften String. Den musst du jetzt nur noch in ein assoziatives Array parsen. Ich hab mich noch nicht damit beschäftigt, assoziative Arrays dynamisch zu erzeugen, aber irgendwie muss das gehen.



  • Danke, offenbar existiert tatsächlich keine direkte Methode. Ich nütze jetzt die Methode die phpBB benützt um die config-Tabelle auszulesen:

    while ( $row = $db->sql_fetchrow($result) )
    {
    	$board_config[$row['config_name']] = $row['config_value'];
    }
    

    Auch okay 🙂

    BTW: Stylisch, gibt ja PHP-Tags auch schon 😮

    MfG SideWinder



  • SideWinder schrieb:

    BTW: Stylisch, gibt ja PHP-Tags auch schon 😮

    Dass dir das erst beim 9029. Posting auffällt 😃


Anmelden zum Antworten