排序foreach循环结果

时间:2019-09-27 13:22:22

标签: php mysql foreach joomla joomla3.0

我想在我的VIEWS中的foreach循环中以$ distance为基础对它进行排序。

    $db = $this->getDbo();
    $query = $db->getQuery(true)
                ->select('*')
                ->from('#__load');

    $db->setQuery($query);               
    $db->query();
    $rows = $db->loadObjectList();
    return $db->loadObjectList();

这是我的视图中的代码,我想按距离对它进行排序

  foreach ($this->items as $i => $item) {  
       $distance = $item->result1 * $item->result2        
  sort($distance)
}

echo $distance

结果

  

3,6,2,7,8

我想这样显示

  

2、3、6、7、8

3 个答案:

答案 0 :(得分:3)

sort在数组上起作用,而你正在做的是对数组中每一个无效的项目调用sort。

相反,您可以做的是先进行foreach循环,然后再进行排序:

  $array = [];
  foreach ($this->items as $i => $item) {  
      $distance = $item->result1 * $item->result2;        
      $array[] = $distance;
  }
  sort($array);
  var_dump($array);

https://www.php.net/manual/en/function.sort.php

答案 1 :(得分:1)

首先将结果$this->items转换为(array)$this->items,然后使用以下功能之一:

sort() - sort arrays in ascending order
rsort() - sort arrays in descending order
asort() - sort associative arrays in ascending order, according to the value
ksort() - sort associative arrays in ascending order, according to the key
arsort() - sort associative arrays in descending order, according to the value
krsort() - sort associative arrays in descending order, according to the key

并获得排序的值。

答案 2 :(得分:0)

这里有些事情对我来说没有意义,所以我会盲目尝试重构您的脚本,并将所有处理放入它所属的模型中(您不应该在视图)。

未经测试的代码段:

$db = $this->getDbo();
$query = $db->getQuery(true)
            ->select('result1 * result2')
            ->from('#__load')
            ->orderBy(1);
$db->setQuery($query);               
return $db->loadColumn();

要阅读的相关页面:

我希望您的视图现在将收到以下经过排序和索引的数组:

$this->items = [2, 3, 6, 7, 8];

如果您是Joomla用户,请通过Joomla Stack Exchange加入我们。浏览of my answers to mysql tagged questions以获得解释的示例和最佳实践。

如果您住在布里斯韦加斯,请参加我们在西区的每月Joomla用户组聚会(我们并不吓人)。在这里,您可以利用IRL的人员网络来帮助您提高技能并完成项目。