Laravel 按created_at 对数组进行排序

问题描述 投票:0回答:2

我需要按时间顺序对我的 json 数组进行排序,按它的 create_at 时间戳。

  [{
    "id": 1,
    "message": "hello",
    "company_id": 7,
    "investor_id": 35,
    "match_id": 2,
    "created_at": "2015-07-01 12:56:34",
    "updated_at": "2015-07-01 12:56:34"
  }, {
    "id": 2,
    "message": "helloWorld",
    "company_id": 7,
    "investor_id": 35,
    "match_id": 2,
    "created_at": "2015-07-01 12:56:53",
    "updated_at": "2015-07-01 12:56:53"
  }, {
    "id": 3,
    "message": "sup",
    "company_id": 7,
    "investor_id": 35,
    "match_id": 2,
    "created_at": "2015-07-01 13:12:53",
    "updated_at": "2015-07-01 13:12:53"
  }, {
    "id": 4,
    "message": "sup",
    "company_id": 7,
    "investor_id": 35,
    "match_id": 2,
    "created_at": "2015-07-01 13:13:04",
    "updated_at": "2015-07-01 13:13:04"
  }, {
    "id": 5,
    "message": "sup",
    "company_id": 7,
    "investor_id": 35,
    "match_id": 2,
    "created_at": "2015-07-01 15:06:39",
    "updated_at": "2015-07-01 15:06:39"
  }, {
    "id": 1,
    "message": "yo yo ",
    "investor_id": 35,
    "company_id": 7,
    "match_id": 2,
    "created_at": "2015-07-01 22:09:36",
    "updated_at": "-0001-11-30 00:00:00"
  }, {
    "id": 2,
    "message": "sup nigga",
    "investor_id": 35,
    "company_id": 7,
    "match_id": 2,
    "created_at": "2015-07-01 14:00:00",
    "updated_at": "-0001-11-30 00:00:00"
  }]

谁能教我如何在 stackoverflow 中尝试很多解决方案。他们中的许多人说数组不能与“sortBy”一起使用。

这是我的代码的一部分:

$companyMessage = Company_Message::where('match_id','=',$match_id);
    $investorMessage = Investor_Message::where('match_id','=',$match_id);
    $message = array();
    if($companyMessage->count()>0 || $investorMessage->count() > 0){
        if($lastActivityDate == null ){
            //load all messages before 
            if($companyMessage !=null){
                foreach ($companyMessage->get() as $cm) {
                    array_push($message,$cm);
                }
            }

            if($investorMessage !=null){
                foreach($investorMessage->get() as $im){
                    array_push($message,$im);
                }
            }

            return $message ;   

        }
php arrays laravel sorting laravel-4
2个回答
1
投票

我认为你可以使用 Laravel 数据库

collection api
而不是
array
来完成此操作,并将项目添加到集合中并在集合上使用
sortBy
方法,

$col = new \Illuminate\Database\Eloquent\Collection();

if ($companyMessage != null) {
  foreach($companyMessage - > get() as $cm) {
    $col->add($cm);
  }
}
if ($investorMessage != null) {
  foreach($investorMessage - > get() as $im) {
    $col->add($im);    
  }
}

$col = $col->sortBy('created_at');

//return the json
return Response::json($jsonArr->toArray());

--- ----

试试这个,但我没有测试过。如果这有效,那么这将是最好的方法。

$companyMessage = Company_Message::where('match_id','=',$match_id);
$investorMessage = Investor_Message::where('match_id','=',$match_id);

//$companyMessage & $investorMessage both are laravel database collection,
// so you can use merge method on collection to merge these two collections.

$allResults = $companyMessage->merge($investorMessage);

//use laravel collection sort method to sort the collection by created_at
$allResults = $allResults->sortBy('created_at');

//return the json
return Response::json($allResults->toArray());    

1
投票
if($companyMessage !=null){
    foreach ($companyMessage->get() as $cm) {
        array_push($message,$cm);                       
    }
}

if($investorMessage !=null){
    foreach($investorMessage->get() as $im){
        array_push($message,$im);
    }
}

$message = array_values(array_sort($message, function ($value) {
    return $value['created_at'];
}));

嘿伙计,我找到了一个更好的解决方案来对数组进行排序。答案可以在 laravel 文档中找到

http://laravel.com/docs/5.1/helpers#method-array-sort

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.