在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中的函数内按升序对对象数组进行排序[重复]的主要内容,如果未能解决你的问题,请参考以下文章