ホームページ  >  記事  >  バックエンド開発  >  Laravelフレームワークのilluminatesupportコレクションのソートの問題

Laravelフレームワークのilluminatesupportコレクションのソートの問題

WBOY
WBOYオリジナル
2016-06-20 12:37:10955ブラウズ

Laravel フレームワーク イルミネーションサポートコレクションのソート問題技術

たぶんそうだ 公開日 2015-04-03 00:59

Laravel のコレクションのソートに問題があって苦労しました。数日前、私は長い間、自分のコードに問題があるのではないかと常に疑っていました。 Collection オブジェクトは、sort を実行した後に、values メソッドを実行する必要があります。そうしないと、Collection オブジェクトの項目の並べ替え結果が反映されません。もちろん手動 toArray() も有効です。 PHP の uasort 関数を呼び出す Collection sort メソッドの内部実装を表示します。この関数は、ソート後に元のキー => 値の関係を維持します。

公式ドキュメントは次のように抜粋されています:

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

このメソッドがなぜvaluesと呼ばれるのかはまだわかりません。この名前は内部でarray_valuesメソッドが使用されています。項目の割り当てを再構成するための値メソッド。場合によっては、開発は非常に面倒で、常に変更されます。コード スニペットは次のとおりです。並べ替えを有効にするには、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();

開発プロセス中に特にこだわりを持ったり、変数の名前やパラメーターのメソッドを気にしすぎたり、時期尚早にコードを最適化したりすることは良くありません。まったく同じビジネスを行う企業は世界中に 2 つと存在しないはずであり、オープンソース ソフトウェアを多用することが必ずしも良いとは限りません。ところで、伝説の 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) コメントを見る


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。