سؤال

وربما أنا مجنون الذهاب، ولكن كان يمكن أن أقسم أنه كان هناك وظيفة 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];
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top