Zweig-Array-zu-String-Konvertierung

Lesezeit: 3 Minuten

Benutzeravatar von Chris98
Chris98

Das ist wahrscheinlich relativ einfach, aber ich bin neu in Twig und ich bin frustriert.

Ich passe Code aus dieser Antwort an: https://stackoverflow.com/a/24058447

Das Array wird in PHP durch dieses Format erstellt:

$link[] = array(
       'link' => 'http://example.org',
       'title' => 'Link Title',
       'display' => 'Text to display',
);

Dann füge ich durch Twig HTML hinzu, bevor ich implodiere:

    <ul class="conr">
        <li><span>{{ lang_common['Topic searches'] }} 
        {% set info = [] %}
        {% for status in status_info %}
            {% set info = info|merge(['<a href="https://stackoverflow.com/questions/32633853/{{ status[\"link\'] }}" title="https://stackoverflow.com/questions/32633853/{{ status[\"title\'] }}">{{ status[\'display\'] }}</a>']) %}
        {% endfor %}

        {{ [info]|join(' | ') }}
    </ul>

Aber ich bekomme:

Fehlernr [8] Array-zu-String-Konvertierung in F:\localhost\www\twig\include\lib\Twig\Extension\Core.php in Zeile 832

Es ist behoben, wenn ich diese Zeile entferne, aber nicht angezeigt wird:

{{ [info]|join(' | ') }}

Irgendwelche Ideen, wie ich das richtig implodieren kann?

** aktualisieren **

Mit der Dump-Funktion von Twig wird nichts zurückgegeben. Es scheint, dass es nicht einmal in das Array geladen wird. Wie kann ich Informationen in ein neues Array laden.

  • Wenn Sie dies im Jahr 2023 lesen, join unterstützt zwei Parameter: glue, and (“and: Das Trennzeichen für das letzte Paar von Eingabeelementen […] Der and Argument wurde in Twig 1.37 hinzugefügt.“)

    – Sandra

    18. Januar um 11:35 Uhr

info ist ein Array, also sollten Sie einfach schreiben

{{ info|join(', ') }}

um Ihr Info-Array anzuzeigen.

[info] ist ein Array mit einem Wert: dem Array info.

  • NB: Arbeitet nur mit Werten im Falle eines assoziativen Arrays

    – Delphine

    17. November 2017 um 15:39 Uhr

  • @Delphine Wenn Sie die Schlüssel eines assoziativen Arrays verbinden möchten, können Sie das Array durch die übergeben keys zuerst filtern, dh {{ info | keys | join(', ') }}

    – Dan Abrey

    14. Dezember 2017 um 11:31 Uhr


Sie sollten nicht wirklich komplexe Datenstrukturen innerhalb von Twig-Vorlagen erstellen. Sie können das gewünschte Ergebnis auf eine idiomatischere und lesbarere Weise wie folgt erzielen:

{% for status in status_info %}
    <a href="https://stackoverflow.com/questions/32633853/{{ status.link }}" title="{{ status.title }}">{{ status.display }}</a>
    {% if not loop.last %}|{% endif %}
{% endfor %}

  • Das Problem ist jedoch, es zu implodieren. Ich brauche jedes Element getrennt durch ein ‘ | ‘, aber wenn ich das manuell mache, gibt es ein zusätzliches “|” auf der rechten Seite der Seite. Das ist die einzige Möglichkeit, die ich mir vorstellen kann, um nur die benötigte Menge zu erhalten.

    – Chris98

    17. September 2015 um 15:40 Uhr


  • Ähm … das ist was if not loop.last soll verhindern…!?

    – verzeihen

    17. September 2015 um 15:41 Uhr

  • OK. Danke. Davon hatte ich noch nie gehört. Ich bin ziemlich neu bei Twig.

    – Chris98

    17. September 2015 um 15:41 Uhr


Benutzeravatar des Entwicklers
Entwickler

Sie können json_encode verwenden, um das Array als Strig zu serialisieren, und dann hübsches anzeigen – in den Zweig eingebaut

    {{ array|json_encode(constant('JSON_PRETTY_PRINT')) }} 
    

  • Bitte erläutern Sie das weiter – was macht Ihr Code? Denken Sie daran, dass andere in der Lage sein sollten, von diesem Code zu lernen

    – Nico Haase

    28. Juni 2019 um 14:48 Uhr

  • Dies ist die beste Antwort, da die gesamte Struktur in eine Zeichenfolge umgewandelt wird, während join schlägt fehl, wenn die Variable ein verschachteltes Array ist (zB try ['a', ['b'] ]). Nützlich zum Debuggen.

    – Fabien Snauwaert

    2. April 2020 um 8:52 Uhr

Benutzeravatar von Georg
Georg

bei Bedarf assoziatives Array:

{{info|json_encode(constant('JSON_PRETTY_PRINT'))|raw}}

1444410cookie-checkZweig-Array-zu-String-Konvertierung

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy