علی اسماعیلی
5 سال پیش توسط علی اسماعیلی مطرح شد
7 پاسخ

مرتب سازی اطلاعات

سلام میخوام اطلاعات رو براساس قیمت مرتب سازی کنم به این صورت جدولم

id price qty
3 2000 1
0 3000 2
5 0 3
میخوام مرتب کنم بار اساس قیمت خب این جاش مشکلی نیست مشکل اینجاست که اگه qty یا price هرکدوم صفر بود بره ته جدول
با این ترتیبی من گذاشتم چه صعودی و چه نزوری باید همون 1 اول باشه


ثبت پرسش جدید
حسام موسوی
تخصص : طراح و برنامه نویس
@hesammousavi 5 سال پیش مطرح شد
1

سلام خوب الان شما بر اساس price میخواید مرتب سازی کنید یا بر اساس qty ؟
اطلاعاتی رو در بالا فرستادید میخواید چه شکلی مرتب بشه ؟


علی اسماعیلی
تخصص : php Laravel
@aliesmaili.code 5 سال پیش آپدیت شد
0

@hesammousavi
سلام میخوام براساس price مرتب سازی بشه خب ولی مثلا توی حالت نزولی ممکنه یک محصول قیمتش بالا تر باشه ولی موجود نباشه خب این باید بره ته بشینه نه اول

یا توی حالت صعودی قیمت ممکنه صفر باشه نمیخوام بیاد اول


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 5 سال پیش آپدیت شد
1

شما وقتی از الکوئنت یا کوئری بیلدر استفاده کنی.. لاراول برات Instance ی از کلاس Collection رو بر میگردونه.

که میتونی از متد sort استفاده کنی و یه کلوژر بهش پاس بدی و شرطش رو مشخص کنی:

$orders = Order::all();
$orders->sort(function($a, $b) {
   if($a->id === $b->id) {
     if($a->price === $b->price) {
       return 0;
     }
     return $a->price < $b->price ? -1 : 1;
   } 
   return $a->id < $b->id ? -1 : 1;
});

به این ترتیب اول بر اساس id و بعید بر اساس قیمت اطلاعات سرت میشند.
اگر qty هم برابر با 0 باشه... اصلا منطقی نیست چنین Order ی داشته باشیم. میتونید حذفش کنید.

در نهایت اگر از PHP 7 به بعد استفاده میکنی.. میتونی از Spaceship Operator هم استفاده کنی:
و کد رو بصورت زیر تغییر بدی:

$orders->sort(function ($a, $b) {
    return $a->id === $b->id ? $a->price <=> $b->price : $a->id <=> $b->id ;
});

علی اسماعیلی
تخصص : php Laravel
@aliesmaili.code 5 سال پیش مطرح شد
0

@ali.bayat
سلام خیل ممنون order نیست لیست محصولات وقتی فیلتر میشه اول اونایی رو نشنون بده که هم قیمت دارن و هم موجودی


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 5 سال پیش مطرح شد
1

خوب فیلدها رو با price و qty عوض کن


علی اسماعیلی
تخصص : php Laravel
@aliesmaili.code 5 سال پیش مطرح شد
0

@ali.bayat

میشه توی روابط هم استفاده کرد ؟ مثلا

$product->load(['variants' => function ($q) {
            $q->sort(function ($a, $b) {

            });

یه همچین چیزی


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 5 سال پیش مطرح شد
1

sort متدی هست توی کلاس collection
هر جا که کالکشن داشته باشی میتونی استفاده کنی


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام