2014-06-30 3 views
9

Le problème est très court.Intval in Twig Template

J'ai un tableau avec des clés entières, et un paramètre qui est la chaîne. Je veux obtenir l'élément de ce tableau en utilisant ce paramètre.

Comment obtenir dans Twig intval - (int)"32" de {{ variable }}variable == (string) "32";?

+2

Êtes-vous sûr que ce isnt logique de l'application et doit être fait avant d'entrer brindille? – ToBe

Répondre

6

Il existe des filtres dans les brindilles. L'un d'eux est la suivante:

http://twig.sensiolabs.org/doc/filters/number_format.html

{{ variable|number_format }} 

si vous faites des maths sur une chaîne, il sera jeté automatiquement à un interger de toute façon, cependant!

+3

Corrigez-moi si je me trompe, mais ici vous inversez le problème de l'OP. '{{variable | number_format}}' est en train de convertir un int en string, ce qui oui, résout le problème, mais dans l'autre sens ... – xDaizu

+4

Je ne crois pas que ce soit correct. Je viens de le tester et le filtre "number_format" ne convertit pas la chaîne en int. – Cninroh

+0

comme @xDaizu mentionné correctement, cela convertit un flottant en une chaîne. Voir http://php.net/number_format ainsi que la fonction de brindille est juste un emballage – lordrhodos

5

Vous pouvez accéder à une valeur d'un tableau en utilisant une variable comme clé comme suit: myArray[myKey]. Peu importe si les clés de tableau sont des entiers (par exemple 32) ou des chaînes correspondantes ("32"), ou si myKey est un entier ou une chaîne. Toutes ces combinaisons devraient travailler (see TwigFiddle):

{% set myArray = { 
    1: 'first', 
    '2': 'second', 
} %} 

{% set keyOneInt = 1 %} 
{% set keyOneStr = '1' %} 
{% set keyTwoInt = 2 %} 
{% set keyTwoStr = '2' %} 

{# These all print 'first' #} 
{{ myArray.1 }} 
{{ myArray[1] }} 
{{ myArray['1'] }} 
{{ myArray[keyOneInt] }} 
{{ myArray[keyOneStr] }} 

{# These all print 'second' #} 
{{ myArray.2 }} 
{{ myArray[2] }} 
{{ myArray['2'] }} 
{{ myArray[keyTwoInt] }} 
{{ myArray[keyTwoStr] }} 

Sur la troisième ligne du code ci-dessus, la chaîne clé '2' est en fait jeté en entier 2, comme PHP's documentation of arrays état:

Cordes contenant valide les entiers décimaux, à moins que le nombre soit précédé d'un signe +, sera converti en type entier. Par exemple. la clé "8" sera réellement enregistrée sous . D'autre part "08" ne sera pas cast, car ce n'est pas un entier décimal valide.

Si, pour une raison quelconque, vous avez besoin d'un nombre entier, vous pouvez convertir une chaîne en entier en y effectuant des opérations mathématiques (par ex. variable * 1 (= "32" * 1) ou variable + 0 (= "32" + 0).