يوسف محمد49 نشر 16 فبراير أرسل تقرير نشر 16 فبراير اذا كانت لدي مجموعه من البيانات مثلا المستخدم يريد اضافة مجموعه من اسما المدن كيف احفظهم في الداتابيز بدون حلقة for لانها غير جيده 1 اقتباس
0 Taha Khaled2 نشر 16 فبراير أرسل تقرير نشر 16 فبراير فعلا استخدام حلقة for loop غير جيده في حفظ البيانات بسبب اداء الابلكيشن ساطرح عليك الحل ببساطه لتحسين الكود الخاص بك ساعطيك مثال عملي من مشروع كنت اعمل عليه وطلب مني تحسين اداء المشروع في الكود الاول هنا for ($i = 0; $i < count($request->titals_ar); $i++) { $standard = new StandardSpecification(); $standard->title_en = $request->titals_en[$i]; $standard->title_ar = $request->titals_ar[$i]; $standard->value_ar = $request->values_ar[$i]; $standard->value_en = $request->values_en[$i]; $standard->product_id = $product->id; $standard->save(); } هذه الكود يستخدم حلقة for لتكرار عملية إنشاء وحفظ سجلات StandardSpecification، وعلى الرغم من أنه يقوم بالوظيفة المطلوبة، إلا أنه يأتي مع بعض السلبيات التي تؤثر علي الاداء : أداء أقل الحلقة for قد تكون أقل كفاءة من حيث الأداء مقارنة بالطرق الأخرى التي ساطرحها عليك ايضا، خاصةً عند التعامل مع مجموعات كبيرة من البيانات. يمكن أن تؤدي التكرارات المتكررة إلى تأثير سلبي على أداء التطبيق. زيادة في الكود والتكرار: يتطلب استخدام الحلقة for كتابة المزيد من الكود مقارنة بالحلول البديلة ، وهذا قد يؤدي إلى زيادة في التكرار وتعقيد الكود. أقل قابلية للتوسع وإعادة الاستخدام الكود المكتوب بالحلقة for يكون أقل قابلية للتوسع وإعادة الاستخدام بسبب التعلق القوي بالبيانات الخاصة بالحلقة والتكرارات. إذا تغيرت هيكلة البيانات أو تم تحديثها، فقد يتطلب تعديل كبير في الكود. انظر للكود الثاني $standards = []; $standards = array_map(function ($i) use ($request, $product) { return [ 'title_en' => $request->titals_en[$i], 'title_ar' => $request->titals_ar[$i], 'value_ar' => $request->values_ar[$i], 'value_en' => $request->values_en[$i], 'product_id' => $product->id, 'created_at' => now(), 'updated_at' => now(), ]; }, range(0, count($request->titals_ar) - 1)); استخدام array_map يمكن أن يؤدي إلى أداء محسن مقارنة بالحلقة for، خاصةً عند التعامل مع مجموعات كبيرة من البيانات. الدالة array_map تنفذ التحويل على كل عنصر في المصفوفة في مرة واحدة، مما يقلل من الوقت اللازم للتكرار. كتابة أقل باستخدام array_map، يمكنك كتابة أقل كمية من الكود مقارنة بالحلقة for، وذلك بفضل الاستخدام الفعال للدالة والتحويل المطبق على المصفوفة ككل. قابلية للتوسع وإعادة الاستخدام الكود المكتوب باستخدام array_map يكون أكثر قابلية للتوسع وإعادة الاستخدام بسبب استخدام الدالة لتحويل المصفوفة. يمكنك إعادة استخدام الدالة بسهولة في امور أخرى. وضوح وقراءة أفضل الكود باستخدام array_map يكون أكثر وضوحًا وسهولة في القراءة، حيث يوفر الكود البسيط والمباشر معالجة مجموعة البيانات بشكل أكثر وضوحًا. 1 اقتباس
0 يوسف محمد49 نشر 16 فبراير الكاتب أرسل تقرير نشر 16 فبراير بتاريخ الآن قال Taha Khalid: فعلا استخدام حلقة for loop غير جيده في حفظ البيانات بسبب اداء الابلكيشن ساطرح عليك الحل ببساطه لتحسين الكود الخاص بك ساعطيك مثال عملي من مشروع كنت اعمل عليه وطلب مني تحسين اداء المشروع في الكود الاول هنا for ($i = 0; $i < count($request->titals_ar); $i++) { $standard = new StandardSpecification(); $standard->title_en = $request->titals_en[$i]; $standard->title_ar = $request->titals_ar[$i]; $standard->value_ar = $request->values_ar[$i]; $standard->value_en = $request->values_en[$i]; $standard->product_id = $product->id; $standard->save(); } هذه الكود يستخدم حلقة for لتكرار عملية إنشاء وحفظ سجلات StandardSpecification، وعلى الرغم من أنه يقوم بالوظيفة المطلوبة، إلا أنه يأتي مع بعض السلبيات التي تؤثر علي الاداء : أداء أقل الحلقة for قد تكون أقل كفاءة من حيث الأداء مقارنة بالطرق الأخرى التي ساطرحها عليك ايضا، خاصةً عند التعامل مع مجموعات كبيرة من البيانات. يمكن أن تؤدي التكرارات المتكررة إلى تأثير سلبي على أداء التطبيق. زيادة في الكود والتكرار: يتطلب استخدام الحلقة for كتابة المزيد من الكود مقارنة بالحلول البديلة ، وهذا قد يؤدي إلى زيادة في التكرار وتعقيد الكود. أقل قابلية للتوسع وإعادة الاستخدام الكود المكتوب بالحلقة for يكون أقل قابلية للتوسع وإعادة الاستخدام بسبب التعلق القوي بالبيانات الخاصة بالحلقة والتكرارات. إذا تغيرت هيكلة البيانات أو تم تحديثها، فقد يتطلب تعديل كبير في الكود. انظر للكود الثاني $standards = []; $standards = array_map(function ($i) use ($request, $product) { return [ 'title_en' => $request->titals_en[$i], 'title_ar' => $request->titals_ar[$i], 'value_ar' => $request->values_ar[$i], 'value_en' => $request->values_en[$i], 'product_id' => $product->id, 'created_at' => now(), 'updated_at' => now(), ]; }, range(0, count($request->titals_ar) - 1)); استخدام array_map يمكن أن يؤدي إلى أداء محسن مقارنة بالحلقة for، خاصةً عند التعامل مع مجموعات كبيرة من البيانات. الدالة array_map تنفذ التحويل على كل عنصر في المصفوفة في مرة واحدة، مما يقلل من الوقت اللازم للتكرار. كتابة أقل باستخدام array_map، يمكنك كتابة أقل كمية من الكود مقارنة بالحلقة for، وذلك بفضل الاستخدام الفعال للدالة والتحويل المطبق على المصفوفة ككل. قابلية للتوسع وإعادة الاستخدام الكود المكتوب باستخدام array_map يكون أكثر قابلية للتوسع وإعادة الاستخدام بسبب استخدام الدالة لتحويل المصفوفة. يمكنك إعادة استخدام الدالة بسهولة في امور أخرى. وضوح وقراءة أفضل الكود باستخدام array_map يكون أكثر وضوحًا وسهولة في القراءة، حيث يوفر الكود البسيط والمباشر معالجة مجموعة البيانات بشكل أكثر وضوحًا. شكرا لك انا فهمت الفرق بين الطريقتين ولاكن احس ان الكود الثاني متقدم كثير 1 اقتباس
0 Taha Khaled2 نشر 16 فبراير أرسل تقرير نشر 16 فبراير بتاريخ الآن قال يوسف محمد49: شكرا لك انا فهمت الفرق بين الطريقتين ولاكن احس ان الكود الثاني متقدم كثير نعم الكود الثاني هو الافضل واكثر تقدما اذا كنت مبتدئ سيكون فهمه اصعب وانصحك ان تشترك في دورة اكاديمية حسوب لتعلم php ستاخذك من البدايه الي النهايه 1 اقتباس
0 محمد عاطف17 نشر 16 فبراير أرسل تقرير نشر 16 فبراير نعم هناك طريقة فى لارافيل تستطيع ان تضيف بيانات جديدة فى جملة واحده فقط دون الحاجة الى حلقة مكررة. اولا فى كود ال html يمكنك اضافة inputs لها نفس الاسم وتنتهى باقواس المصفوفة مثل هذا الكود <input type="text" name="city[0][name]"> <input type="text" name="city[0][code]"> <input type="text" name="city[1][name]"> <input type="text" name="city[1][code]"> <input type="text" name="city[2][name]"> <input type="text" name="city[2][code]"> هنا ستجد اننى قمت بكتابة 6 مدخلات لنشرح الكود معا. فى جميع المدخلات ستجد انى قمت بتسميتهم ب city[index][attribute] ستجد ان ال index هو رقم العنصر فى المصفوف وال attribute هو الخاصية لهذا العنصر لنفرض ان المدينة لها اسم و كود مختصر لها . اذا كما فى الكود المرفق اول عنصرين هما لاول مدينة و هو الاسم لها و الكود الخاص بها. وهكذا اذا اردت اضافة اكثر من مدينة ساقوم باضافة عنصرين اخرين مع التاكد من تغير ال index لها . هكذا قمنا بالانتهاء من الواجهة الامامية. لنبدا بجزء الواجهة الخلفية . فى ال controller الخاص بلارافيل فى ال request سنجد انه يوجد مصفوفة اسمها city قد تم ارسالها من الواجهة الامامية ولنرى محتوى هذه المصفوفة معا. $city = $request->city; /* [ ['name'=>'مدينة 1', 'code'=> 'c1'], ['name'=>'مدينة 2', 'code'=> 'c2'], ['name'=>'مدينة 3', 'code'=> 'c3'], ] */ ستجد انها تتكون من مصفوفة رئيسية بداخلها عدة مصفوفات بعدد المدخلات التى قمت بادخالها فى الواجهة الامامية . لناتى لطريقة ادخالها فى قاعدة البيانات . يمكنك استخدام دالة insert لاضافة جميع هذه البيانات بطريقتين سواء كنت تستخدم Eloquent او Query Builder كما فى المثال التالى. City::insert($city); // Eloquent DB::table('cities')->insert($city); // Query Builder اقتباس
السؤال
يوسف محمد49
اذا كانت لدي مجموعه من البيانات مثلا
المستخدم يريد اضافة مجموعه من اسما المدن كيف احفظهم في الداتابيز بدون حلقة for لانها غير جيده
4 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.