المصفوفات الترابطية هي بنية بيانات أساسية في PHP، مما يسمح للمطورين بتخزين أزواج القيمة الرئيسية. فهي متعددة الاستخدامات وشائعة الاستخدام لتمثيل البيانات المنظمة. يعد البحث عن عناصر محددة داخل مصفوفة PHP الترابطية مهمة شائعة. لكن معظم الوظائف الأصلية المتوفرة في PHP تعمل بشكل رائع مع المصفوفات البسيطة.
لهذا السبب يتعين علينا غالبًا العثور على مجموعات من الوظائف التي تسمح لنا بفعل نفس الأشياء على المصفوفات الترابطية. ربما بدون أخطاء نفاد الذاكرة؟.
في هذا البرنامج التعليمي، سنستكشف طرقًا وتقنيات مختلفة للبحث عن القيم في مصفوفة ترابطية PHP.
تتحقق الدالة array_key_exists() من وجود مفتاح محدد في مصفوفة ترابطية. يُرجع صحيحًا إذا تم العثور على المفتاح، ويُرجع خطأً إذا لم يتم العثور عليه.
$fruits = [ 'apple' => 'red', 'banana' => 'yellow', ]; if (array_key_exists('banana', $fruits)) { echo "The key 'banana' exists in the array."; } else { echo "The key 'banana' does not exist in the array."; }
تبحث الدالة array_search() عن قيمة في مصفوفة اقترانية وترجع المفتاح المقابل إذا وجدت، أو خطأ إذا لم يتم العثور عليها.
$colors = [ 'apple' => 'red', 'banana' => 'yellow', ]; echo array_search('yellow', $colors); // Print "banana"
يمكنك أيضًا استخدام المصفوفات ذات البيانات الأكثر تعقيدًا كقيمة:
$colors = [ 'apple' => ['red'], 'banana' => 'yellow', ]; echo array_search(['red'], $colors); // Print "apple"
في هذه الحالة أقترح عليك استخدام وضع المقارنة الصارمة. يمكن طلب تمرير معلمة منطقية ثالثة إلى array_search:
echo array_search(['red'], $colors, true);
تشبه الدالة array_search() دالة in_array التي تقوم فقط بإرجاع علامة منطقية بدلاً من مفتاح العنصر.
/* * It also supports strict mode comparison, useful for working with structured data as a value. */ echo in_array(['red'], $colors, true); // Return "true"
يمكنك التكرار من خلال المصفوفة النقابية باستخدام حلقة foreach والبحث يدويًا عن قيمة محددة. يعد هذا مفيدًا عندما تحتاج إلى إجراء مقارنة أو معالجة معقدة لأن الحلقة تعيش في نفس نطاق المصفوفة، بحيث يمكنك الوصول إلى جميع البيانات الموجودة في الحلقة.
$targetValue = 'yellow'; foreach ($colors as $key => $value) { if ($value === $targetValue) { echo "The value {$targetValue} is associated with the key {$key}."; break; // Optional: Stop searching after finding the occurrence. } }
يمكن استخدام الدالة array_filter() لتصفية المصفوفة وإرجاع العناصر التي تجتاز رد اتصال اختباري فقط.
$colors = [ 'apple' => 'red', 'banana' => 'yellow', ]; $filteredArray = array_filter($colors, function ($value) { return $value === 'red'; }); /* * It contains just one element: ['apple' => 'red'] * ‘banana’ was filtered out. */ var_dump($filteredArray);
إذا كان الأداء أحد اهتماماتك فستجد هذا القسم من المقالة مثيرًا للاهتمام بالتأكيد.
لقد قمت بإنشاء برنامج نصي لإجراء عملية بسيطة على مصفوفة مكونة من 200000 عنصر باستخدام array_map وحلقة foreach. لقد استخدمت حزمة Inspector لتتبع أداء العبارتين. يمكنك اللعب بالرمز الموجود في وضع الحماية هذا: https://phpsandbox.io/e/x/5titt
$data = range(1, 200000); $inspector->addSegment(function () use ($data) { array_map(fn($item) => $item * 3, $data); }, 'array_map'); $data = range(1, 200000); $inspector->addSegment(function () use ($data) { foreach ($data as $item) { $data[$item] = $item * 3; } }, 'foreach');
تظهر العشرات من عمليات التنفيذ أن foreach أفضل دائمًا من array_map بنسبة 10٪ تقريبًا.
لكن هذه النتيجة يمكن أن تتغير كثيرًا بناءً على البيئة السياقية. إذا قمت بتشغيل المقتطف في صندوق الحماية المرتبط أعلاه، فسوف تكتشف أن foreach أكثر كفاءة بمقدار 10 مرات من array_map. يمكنك نسخ البرنامج النصي في بيئتك المحلية ووضع بعض المعايير لنفسك.
على أي حال، السبب وراء كونeach أكثر كفاءة بشكل عام من array_map هو أنه لا يعني استخدام رد الاتصال. هناك عبء أكبر عند استدعاء دالة بدلاً من استخدام المصفوفة مباشرة في نفس النطاق. ولهذا السبب، يهدر array_map المزيد من الوقت مع كل تكرار. ولكنها مرئية فقط لمجموعات البيانات الأكبر حجمًا. كلما كان المصفوفة أصغر كلما كانت الفجوة أقل أهمية.
Inspector عبارة عن أداة لمراقبة تنفيذ التعليمات البرمجية مصممة خصيصًا لمطوري البرامج. لا تحتاج إلى تثبيت أي شيء على مستوى الخادم، فقط قم بتثبيت حزمة الملحن وستكون جاهزًا للبدء.
على عكس الأنظمة الأساسية المعقدة الأخرى، فإن Inspector سهل للغاية، وصديق PHP. يمكنك تجربة حزمة Laravel أو Symfony الخاصة بنا.
إذا كنت تبحث عن أتمتة فعالة ورؤى عميقة والقدرة على إعادة توجيه التنبيهات والإشعارات إلى بيئة المراسلة الخاصة بك، فجرب Inspector مجانًا. سجل حسابك.
أو تعرف على المزيد على الموقع: https://inspector.dev
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3