Просмотр файла engine/classes/lib/Twig/Node/Expression/Array.php

Размер файла: 2.29Kb
  1. <?php
  2.  
  3. /*
  4. * This file is part of Twig.
  5. *
  6. * (c) 2009 Fabien Potencier
  7. *
  8. * For the full copyright and license information, please view the LICENSE
  9. * file that was distributed with this source code.
  10. */
  11. class Twig_Node_Expression_Array extends Twig_Node_Expression
  12. {
  13. protected $index;
  14.  
  15. public function __construct(array $elements, $lineno)
  16. {
  17. parent::__construct($elements, array(), $lineno);
  18.  
  19. $this->index = -1;
  20. foreach ($this->getKeyValuePairs() as $pair) {
  21. if ($pair['key'] instanceof Twig_Node_Expression_Constant && ctype_digit((string) $pair['key']->getAttribute('value')) && $pair['key']->getAttribute('value') > $this->index) {
  22. $this->index = $pair['key']->getAttribute('value');
  23. }
  24. }
  25. }
  26.  
  27. public function getKeyValuePairs()
  28. {
  29. $pairs = array();
  30.  
  31. foreach (array_chunk($this->nodes, 2) as $pair) {
  32. $pairs[] = array(
  33. 'key' => $pair[0],
  34. 'value' => $pair[1],
  35. );
  36. }
  37.  
  38. return $pairs;
  39. }
  40.  
  41. public function hasElement(Twig_Node_Expression $key)
  42. {
  43. foreach ($this->getKeyValuePairs() as $pair) {
  44. // we compare the string representation of the keys
  45. // to avoid comparing the line numbers which are not relevant here.
  46. if ((string) $key == (string) $pair['key']) {
  47. return true;
  48. }
  49. }
  50.  
  51. return false;
  52. }
  53.  
  54. public function addElement(Twig_Node_Expression $value, Twig_Node_Expression $key = null)
  55. {
  56. if (null === $key) {
  57. $key = new Twig_Node_Expression_Constant(++$this->index, $value->getLine());
  58. }
  59.  
  60. array_push($this->nodes, $key, $value);
  61. }
  62.  
  63. /**
  64. * Compiles the node to PHP.
  65. *
  66. * @param Twig_Compiler A Twig_Compiler instance
  67. */
  68. public function compile(Twig_Compiler $compiler)
  69. {
  70. $compiler->raw('array(');
  71. $first = true;
  72. foreach ($this->getKeyValuePairs() as $pair) {
  73. if (!$first) {
  74. $compiler->raw(', ');
  75. }
  76. $first = false;
  77.  
  78. $compiler
  79. ->subcompile($pair['key'])
  80. ->raw(' => ')
  81. ->subcompile($pair['value'])
  82. ;
  83. }
  84. $compiler->raw(')');
  85. }
  86. }