使用 Twig 使两个数组相交

tbl*_*cog 3 php arrays symfony twig

我有两个想要相交的数组。我得到了这两个数组:

{{ 转储(数组1) }}

array(6) {
  [0]=>
  array(2) {
    ["id"]=>
    int(121)
    ["text"]=>
    string(3) "uno"
  }
  [1]=>
  array(2) {
    ["id"]=>
    int(122)
    ["text"]=>
    string(3) "dos"
  }
  [2]=>
  array(2) {
    ["id"]=>
    int(123)
    ["text"]=>
    string(4) "tres"
  }
  [3]=>
  array(2) {
    ["id"]=>
    int(124)
    ["text"]=>
    string(6) "cuatro"
  }
  [4]=>
  array(2) {
    ["id"]=>
    int(125)
    ["text"]=>
    string(5) "cinco"
  }
  [5]=>
  array(2) {
    ["id"]=>
    int(126)
    ["text"]=>
    string(4) "seis"
  }
}
Run Code Online (Sandbox Code Playgroud)

{{ 转储(数组2) }}

array(3) {
  [0]=>
  array(2) {
    ["id"]=>
    int(124)
    ["text"]=>
    string(6) "cuatro"
  }
  [1]=>
  array(2) {
    ["id"]=>
    int(125)
    ["text"]=>
    string(5) "cinco"
  }
  [2]=>
  array(2) {
    ["id"]=>
    int(126)
    ["text"]=>
    string(4) "seis"
  }
  [3]=>
  array(2) {
    ["id"]=>
    int(127)
    ["text"]=>
    string(5) "siete"
  }
}
Run Code Online (Sandbox Code Playgroud)

我希望我的第三个数组有这样的结果:

array(3) {
  [0]=>
  array(2) {
    ["id"]=>
    int(124)
    ["text"]=>
    string(6) "cuatro"
  }
  [1]=>
  array(2) {
    ["id"]=>
    int(125)
    ["text"]=>
    string(5) "cinco"
  }
  [2]=>
  array(2) {
    ["id"]=>
    int(126)
    ["text"]=>
    string(4) "seis"
  }
}
Run Code Online (Sandbox Code Playgroud)

问题是:如何使用树枝中的简单过滤器将它们相交?

7oc*_*hem 6

对于任何最终来到这里并拥有合理用例并寻找实际解决方案的人......;)

Twig数组filter过滤器结合起来x in array_y应该可以帮助您实现这一点(在 Twig 1.41 和 2.10 中添加):

{% set arr_a = ['lemon', 'apple', 'peach', 'banana', 'orange', 'pear'] %}
{% set arr_b = ['mango', 'peach', 'orange', 'lemon', 'melon'] %}

{{ arr_a | filter((fruit) => fruit in arr_b) | join(', ') }}
Run Code Online (Sandbox Code Playgroud)

柠檬、桃子、橙子

树枝小提琴在这里


tbl*_*cog 5

更好的解决方案是在执行输出之前将它们在我的控制器或服务中与 php 相交:

array_intersect($array1, $array2);
Run Code Online (Sandbox Code Playgroud)

Twig 的目的是在模板中显示数据,而不需要像 @sjagr 在他的评论中建议的那样进行太多处理。