【问题标题】:Modx is sorting resource ads as strings, not numericallyModx 将资源广告排序为字符串,而不是数字
【发布时间】:2015-09-10 19:40:37
【问题描述】:

这两种方法都试过了,注释的代码是原始的,两次结果都是一样的。

/*
$sql = "select * from modx_site_content where context_key = '$context' order by ABS(id) ASC;";

$results = $modx->query($sql);

foreach($results as $result){

    $output[] = '('.$result['id'].') '.$result['pagetitle'].'=='.$result['id'];

}

*/

$criteria = $modx->newQuery('modResource');

$criteria->where(array(
   'context_key' => $context,
));

$criteria->sortby('id','ASC');

$results = $modx->getCollection('modResource',$criteria);

foreach($results as $result){

    $result = $result->toArray();

    $output[] = '('.$result['id'].') '.$result['pagetitle'].'=='.$result['id'];

}

结果将是:100,101,102,103,50,51,52,53 等。它将它们排序为字符串而不是整数。如果您注意到即使在我的注释代码中我尝试将其明确排序为整数,我检查了数据库该字段是主键[和整数]。

这里发生了什么以及如何正确排序?

[即 50,51,52,53,100,101,012 等...]

【问题讨论】:

  • 很奇怪。您的代码应该返回按 ID 数字排序的集合。如果你 var_dump $output,是不是排序错误?在数据库中,id 为:int(10) unsigned NOT NULL AUTO_INCREMENT
  • 是的 - 如果我转储 $output 数组,它会像数据库一样正确排序

标签: modx modx-revolution


【解决方案1】:

您的 PHP 数组已正确排序,您的 MODx 或 DB 没有任何问题。
要么:

  1. 在客户端,当您处理结果对象时,不保证 javascript 对象是有序的(虽然它们“几乎”总是这样,但取决于浏览器),它们会被词法排序。使用数组 - 数组有保证的顺序。 ECMA 是这么说的..

  2. 你有一些 php sort() 稍后在处理器上发生?

【讨论】:

    猜你喜欢
    • 2011-06-05
    • 2018-12-30
    • 2012-07-05
    • 1970-01-01
    • 2018-02-20
    • 2012-12-22
    • 1970-01-01
    • 2012-01-20
    • 2021-11-22
    相关资源
    最近更新 更多