array-keys mit zeichen einpacken

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • array-keys mit zeichen einpacken

    Hallo.

    Ich versuche Zeichen um die Array-Keys zu setzen. Also sollen aus

    Quellcode

    1. $array(
    2. 'Apfel' => 'rot',
    3. 'Pflaume' => 'blau'
    4. )


    mit Hilfe eine Funktion

    Quellcode

    1. $array(
    2. '{Apfel}' => 'rot',
    3. '{Pflaume}' => 'blau'
    4. )


    werden. Sinn und Zweck ist es, dass ich Smartys in Templates ersetzen kann. Die Array-Keys kann ich in der Datenbank nicht ändern, weil ich diese noch für andere Funktionen brauche.

    In den Templates steht dann {Apfel}. Und "Apfel soll dann mit dem entsprechenden Array-Wert ersetzt werden.

    Im Moment habe ich folgenden Ansatz.

    Quellcode

    1. $tarif_lesen = 'select * from `tarife` WHERE `s_name` = "dom_a"';
    2. $tarif_einlesen = mysql_query($tarif_lesen);
    3. $field = mysql_fetch_array($tarif_einlesen);
    4. $text = file_get_contents('templates/test.html');
    5. $text = str_replace(array_keys($field), array_values($field), $text);


    Allerdings fehlt halt beim str_replace die Klammern.

    Quellcode

    1. str_replace('{'.array_keys($field).'}', array_values($field), $text);
    bringt keinen Erfolg, sondern nur die Fehlermeldung:
    Array to string conversion
  • Hi,
    für solche anwendungen gibts lustige Sachen wie array_map

    Quellcode

    1. $search = array_map(create_function('$x', 'return "{".$x."}";'), array_keys($field));
    2. $replace = array_values($field);
    3. echo str_replace($search, $replace, $text);


    Alternativ durchläufst du das Array eben manuell und baust dabei ein neues Array auf.

    Zu deiner Datenbank Struktur - hast du für jede Ersetzung eine Spalte??
  • Also mehrere Spalten, das verstehe ich jetzt nicht so. Sorry.

    Also ich habe eine Tabelle erstellt mit z.B. folgenden werten.

    Apfel => rot
    Birne => grün
    Pflaume = blau

    Die Funktion soll ja nur nach den Array keys suchen und dann diesen mit Klammern unschweifen. Wen ich einen neuen Array-Wert zufüge dann wird dieser ja auch automatisch durchsucht. Was meinst du jetzt mit zwei Spalten suchen und ersetzen?

    Übrigends: Deine Funktion array_map hat funktioniert. Aber ich bin immer dankbar für Optmierungstips.
  • "mycros" schrieb:

    Also ich habe eine Tabelle erstellt mit z.B. folgenden werten.
    Apfel => rot
    Birne => grün
    Pflaume = blau

    Genauer gesagt sieht die Tabelle aber so aus, oder?

    Brainfuck-Quellcode

    1. +----------------------------------+
    2. | Apfel | Birne | Pflaume |
    3. +----------------------------------+
    4. | rot | grün | blau |
    5. +----------------------------------+


    Zumindest deutet der SELECT darauf hin. Denn mit diesem Code bekommst du die Spaltennamen rot/grün/blau (und den numerischen Index) als Schlüssel und die Werte rot/grün/blau als Werte. Oder?

    "mycros" schrieb:

    Quellcode

    1. $tarif_lesen = 'select * from `tarife` WHERE `s_name` = "dom_a"';
    2. $tarif_einlesen = mysql_query($tarif_lesen);
    3. $field = mysql_fetch_array($tarif_einlesen);


    Willst du also noch eine Banane -> gelb hinzufügen. Fügst du eine neue Spalte hinzu.
    Meine Idee dazu ist aber diese hier:

    Brainfuck-Quellcode

    1. +-----------------------+
    2. | Suche | Ersetze |
    3. +-----------------------+
    4. | Apfel | rot |
    5. | Birne | grün |
    6. | Pflaume | blau |
    7. +-----------------------+


    Dann fügst du neue Werte mit einem normalen INSERT hinzu.
  • Meine Spalten enthalten Apfel, Birne, Pflaume und die Werte sind dementsprechend rot,grün,blau.

    In dem Beispiel von dir würden ja Apfel und Birne Datensätze sein. Aber das sollen Si e ja nicht. Es sollen ja Spalten sein, welche halt Werte haben. Ich gebe zu, dass das Beispiele etwas blöd war zum Erklären.

    Also ich denke, dass meinen Datenbank schon so aufgebaut ist wie dein Beispiel.

    Ich habs aber mit array_map und create_function gut lösen können. Danke.