阵列随机洗牌,同时在树枝中有约 500 行

Posted

技术标签:

【中文标题】阵列随机洗牌,同时在树枝中有约 500 行【英文标题】:Array randomly shuffles while having ~ 500 rows in twig 【发布时间】:2015-03-24 00:33:32 【问题描述】:

我正在控制器中创建一个基于数据库的大数组。然后在树枝中显示它。问题是,有时,这个数组似乎被随机打乱了。刷新页面后是正常的,后来又被洗牌了,正常的时候没有规律。

控制器中的php数组看起来不错,没有问题。然后我将它传递给模板:

return $this->render('AcmeBundle:FooController:bar.html.twig', [
  'allResults' => $results
]);

然后在twig模板中显示:

% for r in allResults %
   r.id   r.name 
% endfor %

现在发生的情况是,它有时会导致页面如下所示:

我在 twig 模板中创建了转储以查看数组本身的样子,然后我得到了:

array (size=437)   'karmv>
   psa' =>      array (size=4)   ;">
'id' => string 'karmv>
   psa' (length=13)   ;">
'pid' => string 'lias="drapa v>zwierzat' (length=22)   ;">
'pr" uct_count' => string '1' (length=1)   ;">
'popularity' => string '766' (length=3)   'wor  dgimna =>      array (size=4)   ;">
'id' => string 'wor  dgimna  (length=18)   ;">
'pid' => string 'y-ertcol-md-3" s' (length=16)   ;">
'pr" uct_count' => string '1' (length=1)   ;">
'popularity' => string '741' (length=3)   'gadz   
elektroniczne' =>      array (size=4)   ;">
'id' => string 'gadz   
elektroniczne' (length=21)   ;">
'pid' => string 'gadz   

当它没问题时,它看起来像这样:

array (size=437)
  'karma-dla-psa' => 
    array (size=4)
      'id' => string 'karma-dla-psa' (length=13)
      'pid' => string 'akcesoria-dla-zwierzat' (length=22)
      'product_count' => string '41' (length=1)
      'popularity' => string '412' (length=3)
  'worki-gimnastyczne' => 
    array (size=4)
      'id' => string 'worki-gimnastyczne' (length=18)
      'pid' => string 'sport-dla-dzieci' (length=16)
      'product_count' => string '151' (length=1)
      'popularity' => string '74' (length=3)
  'gadzety-elektroniczne' => 
    array (size=4)
      'id' => string 'gadzety-elektroniczne' (length=21)
      'pid' => string 'gadzety-komputerowe' (length=19)
      'product_count' => string '71' (length=2)
      'popularity' => string '441' (length=3)

发生了什么事?为什么会这样?

【问题讨论】:

你能提供一个MCVE吗? 我不知道在这种情况下如何提供更好的例子:( 请重新开始并创建最少的代码来重现问题,以便我们可以在自己的机器上进行测试和调试。 所以有 2 个问题:数组随机打乱,你的转储输出看起来像垃圾。通过查看您的屏幕截图,在底部,看起来还有其他垃圾。很抱歉,就目前情况而言,我们无法提供帮助。你应该给我们更多的代码。 【参考方案1】:

我从未使用过 twig 或阅读过它,但根据我的经验,如果您从数据库中提取数据,您应该将其排序 order by,因为在处理数据之前无法确定数据是如何排序的。

在数组中获得数据后,您可以根据需要对其进行随机化。

希望这会有所帮助。

【讨论】:

这真的没有回答问题,数据库也没有任何事情要做,问题不在于行没有排序,这看起来几乎像内存损坏,数组完全搞砸了。 @AndreDaniel 您如何确定在查询后离开数据库时行是有序的?你调试了吗?您是否尝试过明确的order by?当开发过程中发生意想不到的事情时,不要相信不太可能的情况(mem corr.)。 @ChristiaanWesterbeek 从他提供的示例来看,这看起来不像是排序问题,这里字段中的一些字符随机丢失,karma-dla-psa 变为 'karmv> psa,它看起来更像是一个错误一些处理数组(最有可能)或内存损坏(最不可能但仍然可能)的低级框架函数。 如果我没记错的话,问题是数据太大而无法通过控制器传递到树枝模板文件中。因为 sf2 把它当作对象,或者类似的东西......

以上是关于阵列随机洗牌,同时在树枝中有约 500 行的主要内容,如果未能解决你的问题,请参考以下文章

同时不改变循环外变量的值。我需要制作一种以随机方式对数组进行洗牌的方法。 (C#请)[重复]

如何在 Swift 中打乱数组?

计算机程序的思维逻辑 (34) - 随机

如何随机洗牌一个数组

如何创建随机数的多个阵列为JavaScript数据随机化?

c ++矢量随机洗牌部分