Laravel架構illuminatesupportcollection排序問題

來源:互聯網
上載者:User

Laravel架構illuminate\support\collection排序問題技術

maybe yes 發表於2015-04-03 00:59

Laravel 的 Collection 的排序有個問題,前幾天折騰了好久,一直懷疑是自己代碼有問題。Collection 對象執行 sort 後需要執行 values 方法,否則 Collection 對象的 items 排序結果沒有生效。當然手動的 toArray() 是生效的。查看 Collection sort 方法內部實現是調用了 PHP 的 uasort 函數,該函數排序後會維持原來的 key => value 關係。

官方文檔截取如下:

Collection values()Reset the keys on the underlying array.Return ValueCollection

一直弄不明白,為什麼這個方法叫 values,這個取名真讓人費解,values 方法內部使用 array_values 方法對 items 進行了重新賦值。有時候,開發特別折騰,一直在更改... 程式碼片段如下,需要調用 values 方法使得排序生效。

$left = $right = null;switch($sortby){    case "rating":    case "month_sales":        $left = -1;        $right = 1;        break;    case "order_lead_time":    case "minimum_order_amount":        $left = 1;        $right = -1;        break;}if($ascending === "1"){    $left = 1;    $right = -1;}elseif($ascending === "0"){    $left = -1;    $right = 1;}$restaurants->sort(function($a, $b) use ($sortby, $left, $right){    return ($a->{$sortby} >= $b->{$sortby}) ? $left : $right;});$restaurants->values();

開發過程中特別的挑刺,過分的在乎變數命名和參數方式,過早的最佳化代碼,都是不好的。這個世界上應該沒有哪兩家的公司的業務是完全一樣的,用了太多的開源軟體也不一定是好事。順便評價下 Laravel,傳說中的 Artisan,我感覺用起來很不舒暢,錯誤記錄檔不列印日期,不列印哪裡出錯,叫人怎麼調試。

sort 方法 和 values 方法內部實現代碼:

public function sort(Closure $callback){    uasort($this->items, $callback);    return $this;}public function values(){    $this->items = array_values($this->items);    return $this;}

閱(498)評(0)查看評論

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.