【问题标题】:Sort array of objects in ascending order inside a function in PHP [duplicate]在PHP中的函数内按升序对对象数组进行排序[重复]
【发布时间】:2018-06-18 04:24:11
【问题描述】:

我有一个看起来像这样的函数

public function dod()
{
    $this->load->model('deals');
    $unsortedData['deals'] = $this->deals_of_day->get_todays_deals();
    $data['deals']=$this->sort_deals_by_expiration_time($unsortedData['deals']);

    $this->load_view('admin/dod', $data);
}

其中,$unsortedData['deals'] 看起来像这样:

array (size=3)
0 =>
object(stdClass)[64]

public 'created_at' => string '1515477074' (length=10)
public 'updated_at' => string '1515477074' (length=10)
public 'expirationTime' => string '1515479400' (length=10)
1 =>
object(stdClass)[65]
public 'created_at' => string '1515477075' (length=10)
public 'updated_at' => string '1515477075' (length=10)
public 'expirationTime' => string '1515479400' (length=10)
2 =>
object(stdClass)[66]

public 'created_at' => string '1515477075' (length=10)
public 'updated_at' => string '1515477075' (length=10)
public 'expirationTime' => string '1515479400' (length=10) 

我希望 $data['deals'] 是按 expireTime 升序排序的数组。

供参考 我看到this answer 用于对对象数组进行排序,我也看到了this answer,但它们似乎不适合我的情况。

帮我解决这个问题。 谢谢。

【问题讨论】:

  • 我假设数据来自数据库。为什么不从查询中对其进行排序?
  • 是的,它确实来自 MySQL 数据库。我来自 MEAN 堆栈,并且是 LAMP 堆栈的新手。你能告诉我如何从查询中排序吗? @Miggy

标签: php arrays sorting


【解决方案1】:

$data['deals']=$this->sort_deals_by_expiration_time($unsortedData['deals']);替换为以下代码。

// Asc sort

    usort($unsortedData,function($first,$second){
        return $first->expirationTime> $second->expirationTime;
    });

如果要降序排序,请使用:

// Desc sort

    usort($unsortedData,function($first,$second){
        return $first->expirationTime< $second->expirationTime;
    }); 

【讨论】:

    【解决方案2】:

    你可以用这个。

    您可以在查询中进行,而不是在 php 中对数据进行排序。为此,您可以使用此代码。

    假设你的函数是get_todays_deals()

    第一个向函数添加参数。像这样的:

    public function get_todays_deals($sortByField = '',$sortType = ''){
        if($sortByField == 'expirationTime' && $sortType == 'ASC' ) {
            # then do code query for sorting
            # SELECT * FROM table_name ORDER BY $sortByField $sortType; 
        }
    }
    

    使参数等于'',这样你仍然可以在没有参数的情况下使用你的函数。

    【讨论】:

      【解决方案3】:

      这是一个相当简单的操作。您所要做的就是像这样进行两次迭代。

      function sortUnsordedData($array) {
          $count = count($array);
          $placeholder = array();
          for ( $i1=0; $i1<$count; $i1++ ) {
              for ( $i2=0; $i2<$count; $i2++ ) {
                  if ( $i1 == $i2 ) continue;
                  if ( $array[$i1]['expirationTime'] < $array[$i2]['expirationTime'] ) {
                      $placeholder = $array[$i1];
                      $array[$i1] = $array[$i2];
                      $array[$i2] = $placeholder;
                  }
              }
          }
          return $array;
      }
      

      在这里,我们应该收到一个按过期时间升序排序的数组。可能不是最有效的方法,但很容易理解它的工作原理。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-09-17
        • 2017-10-26
        • 2012-06-23
        • 2017-04-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多