إلى حد ما PHP بسيط مسألة مجموعة تقاطع
-
20-09-2019 - |
سؤال
وربما أنا مجنون الذهاب، ولكن كان يمكن أن أقسم أنه كان هناك وظيفة PHP الأساسية التي أخذت اثنين صفائف كوسائط:
$a = array('1', '3');
$b = array('1'=>'apples', '2'=>'oranges', '3'=>'kiwis');
وينفذ تقاطع حيث يتم فحص القيم من $a
مجموعة للاصطدام مع المفاتيح في $b
مجموعة. عودة شيء من هذا القبيل
array('1'=>'apples', '3'=>'kiwis');
هل يوجد مثل هذه دالة (التي فاتني في وثائق)، أم أن هناك طريقة الأمثل للغاية لتحقيق نفس الشيء؟
المحلول
وحاول استخدام array_flip {مفاتيح مفاتيح مع قيمهم} ثم استخدام array_intersect () على سبيل المثال الخاص بك:
$c = array_flip($b); // so you have your original b-array
$intersect = array_intersect($a,c);
نصائح أخرى
وأنا ليس 100٪ اضحة على ما تريد. هل تريد أن تحقق القيم من $ ضد KEYS من $ ب؟
وهناك عدد قليل من الوظائف تتقاطع:
http://php.net/manual/en/function.array -intersect.php http://www.php.net/manual/en/ function.array-تتقاطع-key.php
ولكن ربما تحتاج:
http://www.php.net/manual /en/function.array-intersect-ukey.php بحيث يمكنك تحديد وظيفة الخاصة بك لمطابقة مفاتيح و / أو القيم.
هل لforeach
بسيطة لأعاد مجموعة الأولى والحصول على القيم المناظرة من مجموعة الثانية:
$output = array();
foreach ($a as $key) {
if (array_key_exists($key, $b)) {
$output[$key] = $b[$key];
}
}
ومجرد الاختلاف في الجواب البامية، وينبغي أن تكون أكثر كفاءة أن تجرى الاختبارات على مفاتيح فقط قبل دخول حلقة.
$intersection = array_intersect($a, array_keys($b));
$result=array();
foreach ($intersection as $key) {
$result[$k]=$b[$k];
}