Php Twigg for循环是否以可预测的顺序运行?
我在细枝模板中有一个Php Twigg for循环是否以可预测的顺序运行?,php,arrays,sorting,twig,Php,Arrays,Sorting,Twig,我在细枝模板中有一个for循环 {% for v in details.variants %} 此处详细信息。变体是一个来自数据库的数组: [variants] => Array ( [0] => Array ( [Id] => 8711 [Title] => Variant the First [Code] =>
for
循环
{% for v in details.variants %}
此处详细信息。变体是一个来自数据库的数组:
[variants] => Array
(
[0] => Array
(
[Id] => 8711
[Title] => Variant the First
[Code] =>
[Price] => 6989.99
)
[1] => Array
(
[Id] => 8713
[Title] => Variant the Second
[Code] =>
[Price] => 769.99
)
)
出于某种原因,在呈现的HTML中,第二个变量首先出现,然后是第一个变量。数据肯定是以正确的顺序从数据库中出来的,并且传递给Twig的数组是正确的
从一页到另一页是不一致的。有的顺序正确,;有些则不然。但是,每个页面都是一致的:多次刷新显示相同的顺序。(所有这些页面都使用同一个细枝模板。)我也无法在自己的机器上复制它,因为机器似乎总是显示正确的顺序
Twig是否遵守提供的数组顺序?数组是否有字符串键或整数键有区别吗?是的,twig
尊重顺序,因为它只是下面的一个foreach
小枝
PHP
是的,twig
确实尊重顺序,因为它只是一个foreach
的底层
小枝
PHP
您如何确保数据以正确的顺序从数据库中出来,并且传递给Twig的数组是正确的?既然你说你不能在自己的机器上生成这个,这就引出了一些问题。你是如何确保数据确实是以正确的顺序从数据库中出来的,并且传递给Twig的数组是正确的?既然你说你不能在自己的机器上生产这个,这就产生了一些问题。
{% set variants = [
{'foo':'bar', },
{'foo':'foo', },
] %}
{% for variant in variants %}
{{ variant.foo }}
{% endfor %}
protected function doDisplay(array $context, array $blocks = array())
{
// line 1
$context["variants"] = array(0 => array("foo" => "bar"), 1 => array("foo" => "foo"));
// line 5
echo "
";
// line 6
$context['_parent'] = $context;
$context['_seq'] = twig_ensure_traversable((isset($context["variants"]) || array_key_exists("variants", $context) ? $context["variants"] : (function () { throw new Twig_Error_Runtime('Variable "variants" does not exist.', 6, $this->getSourceContext()); })()));
foreach ($context['_seq'] as $context["_key"] => $context["variant"]) {
// line 7
echo " ";
echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->getSourceContext(), $context["variant"], "foo", array()), "html", null, true);
echo "
";
}
$_parent = $context['_parent'];
unset($context['_seq'], $context['_iterated'], $context['_key'], $context['variant'], $context['_parent'], $context['loop']);
$context = array_intersect_key($context, $_parent) + $_parent;
}