在PHP中的函数内按升序对对象数组进行排序[重复]

Posted

技术标签:

【中文标题】在PHP中的函数内按升序对对象数组进行排序[重复]【英文标题】:Sort array of objects in ascending order inside a function in PHP [duplicate] 【发布时间】: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 【参考方案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;

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

【讨论】:

以上是关于在PHP中的函数内按升序对对象数组进行排序[重复]的主要内容,如果未能解决你的问题,请参考以下文章

php之快速入门学习-11(数组排序)

PHP 数组排序

PHP 数组排序:内置函数算法排序

PHP 数组排序:内置函数算法排序

如何根据GPA对数组列表进行升序排序? arraylist 包含一个对象数组。 (Java)[重复]

PHP数组排序