سلام و عرض ادب خدمت اساتید
من یک سایتی دارم اینم تصاویرش :
توضحات :
من دوتا مدل دارم به اسم Questions , NextGeneration
هر کدوم از مدل ها دو تا ستون داره systemid , subjectid
و هر NextGeneration چند تا Question داره
مشکل من الان اینه :
من وقتی توی صفحه میام سلکت میکنم هر چیزی که میخوام . وقتی تعداد رو وارد میکنم سیستم کلی پروسس میکنه
این کد من :
$next_gen = NextGeneration::whereIn('system_id', $request->systems)
->whereIn('subject_id', $request->subjects)
->get();
$matchedQuestionIds = [];
$questionCountsTwo=[];
foreach ($next_gen as $gen) {
$questionCounts[] = [$gen['id'], count($gen['questions']) , $gen['questions']->pluck('id')];
$questionCountsTwo[] = count($gen['questions']);
if (count($gen['questions']) == $result['next_generation']) {
$matchedQuestionIds = $gen['questions']->pluck('id');
break;
} else {
if (count($gen['questions']) == $result['next_generation']) {
$matchedQuestionIds = $gen['questions']->pluck('id');
break;
}
}
}
if (!empty($matchedQuestionIds)) {
$questions = in_array('traditional', $request->question_types) ? $questions->merge($matchedQuestionIds) : $matchedQuestionIds;
} else {
$res = $this->findPairsDaniel($questionCounts, $result['next_generation']);
//$res = $this->find_combinations_with_sum($questionCounts, $result['next_generation']);
if(!empty($res)){
$randomIndex = array_rand($res);
$randomArray = $res[$randomIndex];
if (in_array('traditional', $request->question_types)) {
$questions = $questions->merge($randomArray[0][2]);
} else {
$questions = $randomArray[0][2];
}
foreach (array_slice($randomArray, 1) as $n) {
$questions = $questions->merge($n[2]);
}
}else{
$inventory = $this->generateNumberCombinationsRecursive($questionCountsTwo);
$minValue = ($this->findClosestNumbers($result['next_generation'], $inventory) == null)? min($inventory):$this->findClosestNumbers($result['next_generation'], $inventory)[0] ;
$maxValue = ($this->findClosestNumbers($result['next_generation'], $inventory) == null )?max($inventory):$this->findClosestNumbers($result['next_generation'], $inventory)[1];
return [
'status' => 'warning',
'max' => $maxValue + $result['traditional'],
'min' => $minValue + $result['traditional']
];
}
}
اینم فانکشن هایی که فراخونی میشه :
public function findPairsDaniel($arrays, $targetSum) {
$result = [];
$n = count($arrays);
// فراخوانی تابع بازگشتی
$this->findPairsRecursiveDaniel($arrays, $targetSum, 0, $n, [], $result);
return $result;
}
public function findPairsRecursiveDaniel($arrays, $targetSum, $startIndex, $n, $currentCombination, &$result) {
// بررسی اعداد موجود در ترکیب فعلی
$sum = array_sum(array_column($currentCombination, 1));
if ($sum == $targetSum) {
// افزودن ترکیب به نتیجه
$result[] = $currentCombination;
return;
}
for ($i = $startIndex; $i < $n; $i++) {
// ایجاد یک کپی از ترکیب فعلی
$newCombination = $currentCombination;
// اضافه کردن ارایه فعلی به ترکیب
$newCombination[] = $arrays[$i];
$this->findPairsRecursiveDaniel($arrays, $targetSum, $i + 1, $n, $newCombination, $result);
}
}
function generateNumberCombinationsRecursive($numbers, $groupSize=2){
if(count($numbers) <= $groupSize){
return [];
}
$groups = array_chunk($numbers, $groupSize);
foreach ($groups as $group) {
$sums[] = array_sum($group);
}
return array_merge($sums, $this->generateNumberCombinationsRecursive($sums, $groupSize));
}
public function findClosestNumbers($number, $arr) {
sort($arr);
$closestSmaller = $arr[0];
$closestLarger = $arr[count($arr) - 1];
foreach ($arr as $val) {
if ($val < $number && *****number - $val) < *****number - $closestSmaller)) {
$closestSmaller = $val;
}
if ($val > $number && *****number - $val) < *****number - $closestLarger)) {
$closestLarger = $val;
}
}
return array($closestSmaller, $closestLarger);
}
سیستم خیلی کند شده و وقتی فانکشن ها هم توی دیتای بالا خونده میشه اصلا هیچی نمیاره بالا و صفحه خالی میده .
هدف من از نوشتن فانکشن ها :
یکیش برای اینه که بیاد تمام تعداد سوالات رو بگیره و بیاد به تعداد ارایه ها جمع کنه . مثلا سه تا ارایه دارم [1,2,4,3] که میخوام اینا رو باهم جمع کنه ببینم به اون عدد من میرسه یا نه
مثلا عدد ۱۲ هستش با ارایه بالا
به این صورت عمل کنه
1+2 = 3 , ۴+۳ = ۷ , ۲+۳ =۵ , 1+3 = 4 و مثلا اعداد تموم شد
1+2+3 =6 الی اخر
۱+۲+۳+۴
@Raymond @Pouyab @MortezaVaezi @FullStack @hesammousavi
سلام دوستان لطفا این سوال رو بررسی میکنید؟
سلام و عرض ادب!
بررسی کدی که ارائه دادید نشان میدهد که برخی از بخشهای آن ناقص هستند و ممکن است باعث ایجاد خطاها و مشکلاتی در سیستم شوند. اما به علت ناقص بودن بخشهایی از کد و از دست رفتن برخی جزئیات مهم، دشوار است به طور کامل درک کنم که شما دقیقاً چه مشکلی دارید و چگونه باید آن را حل کنید.
به هر حال، میتوانم تعدادی نکته را به شما بیان کنم:
در قطعه کدی که ارائه دادید، خطی که if (count($gen['questions']) == $result['next_generation'])
نوشته شده است، دو بار تکرار شده است. این نکته بیاهمیت به نظر میرسد و میتوان آن را حذف کرد.
در این قسمت از کد if (!empty($matchedQuestionIds)) { ... }
، متغیر $questions
که قبلاً تعریف نشده است، به کار رفته است. بنابراین ممکن است این قسمت باعث بروز خطاها شود. لازم است که مطمئن شوید که $questions
به درستی تعریف و مقداردهی شده است.
در تابع findPairsDaniel
، شما از یک آرایه به عنوان پارامتر $arrays
استفاده میکنید، اما در تمام استفادههای دیگر این آرایه را با نام $questionCounts
فراخوانی میکنید. اطمینان حاصل کنید که نامها درست استفاده شدهاند و اگر قرار است از نام $questionCounts
استفاده کنید، آن را در تمام جاهای لازم بهروزرسانی کنید.
بهتر است کدهای کامل و جزئیات بیشتری از ساختار دادهها و وظیفههای مورد انتظارتان ارائه دهید تا بتوانم بهتر کمک کنم.
مرسی که راهنمایی کردید درمورد گزینه دومی که عرض کردید من قبلا یه سری کوئسشن گرفتم و میخوام باهم توی یک ارایه برن و ادامه کار خودشو انجام بده
من یه لینک ویدیو میذارم خدمتتون تا بهتر منظورمو برسونم .
این دوتا تصویر یکیش کد هستش و دومی ریسپانس خالی
این لینک ویدیویی که گرفتم]2
در اصل اینطوری میشه گفت که وقتی تعداد داده های ارسال میره بالا پاسخی از سمت سرور ارائه نمیشه. درسته؟
با توجه به توضیحات شما، مشکلتان به نظر میرسد به عدم بهینهسازی کد و مدیریت حجم بزرگ دادهها برمیگردد. برای حل این مشکل، میتوانید از روشها و تکنیکهای زیر استفاده کنید:
استفاده از پرسوجوی مستقیم: به جای بازیابی تمام رکوردها از جداول مورد نیاز و سپس انجام پردازش در حافظه، سعی کنید پرسوجوی مستقیم و بهینهتری را انجام دهید. از قابلیتهای پایگاه داده خود، مانند استفاده از JOIN و WHERE بهینه و صحیح برای بازیابی دادههای مورد نیاز خود استفاده کنید.
صفحهبندی (Pagination): اگر حجم دادههایی که دریافت میکنید بسیار زیاد است، ممکن است بارگیری همه دادهها به مشکل برخورد کند. در این صورت، صفحهبندی را به کار ببرید و دادهها را به صورت پیشفرض به شما تحویل دهد. با استفاده از مکانیزم صفحهبندی، میتوانید تعداد دادههایی که در هر بار درخواست به کاربر ارسال میشود را محدود کنید و از بارگیری و پردازش یکباره تمام دادهها جلوگیری کنید.
بهینهسازی پرسوجوها: بررسی و بهینهسازی پرسوجوهای استفاده شده در کد، میتواند تاثیر قابل توجهی در عملکرد کد داشته باشد. مطمئن شوید که شما از ایندکسها و شرایط WHERE بهینه استفاده میکنید و عملیات JOIN بهینهترین شکل ممکن را دارد.
بهینهسازی الگوریتمها: بررسی الگوریتمهای استفاده شده در کد خود میتو
اند بهبود قابل توجهی در عملکرد برنامه داشته باشد. سعی کنید الگوریتمهایی را انتخاب کنید که در مواجهه با حجم بزرگ دادهها بهینه عمل کنند.
با استفاده از این روشها و بهینهسازیها، احتمالاً مشکل کار نکردن کد در مواجهه با حجم بزرگ دادهها کاهش خواهد یافت. همچنین، بهتر است همواره به عملکرد کد خود نظارت داشته باشید و در صورت لزوم ابزارهای مانیتورینگ و پروفایلر را برای تحلیل و بهبود عملکرد استفاده کنید.
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟