كيف تتكاثر قيم الصفيف الرقمية للمفاتيح المماثلة في PHP؟

StackOverflow https://stackoverflow.com/questions/4109100

سؤال

   $a = array ('x' => 2, 'y' => 3);
   $b = array (          'y' => 2, 'z' => 3);

// $c = $a * $b;
// i would like to have

// $c = array ('x' => 0, 'y' => 6, 'z' => 0);
هل كانت مفيدة؟

المحلول

إذا كنت تريد الضرب أي مفاتيح مماثلة معًا ، ستحتاج إلى الحصول على قائمة بالمفاتيح.array_keys يبدو أن مجرد وظيفة لذلك.

function foo($a, $b)
{
   foreach(array_keys($a) as $i)
   {
      if(array_key_exists($i, $b){  // exists in a and b
          $result[$i] = $a[$i]*$b[$i];
      }else{  // exists and a but not b
          $result[$i] = 0;
      }
   }
   foreach(array_keys($b) as $i)
   {
      if(not array_key_exists($i, $a){ //exists in b but not i a
          $result[$i] = 0;
      }
   }
   return $result
}

هذا سيعمل (نأمل) على أي مجموعة من المفاتيح التي تسلمها ، وليس فقط X و Y و Z.

نصائح أخرى

يمكنك استخدام array_map وإساءة معاملة bcmul لهذا الغرض:

array_map( 'bcmul', $a, $b ) == $a * $b

سيكون عليك استخدام مكتبة أو تحديد المنتج المتقاطع بنفسك:

function cross_product($a, $b)
{
  return array( $a['y'] * $b['z'] - $a['z'] * $b['y'], ...
}

http://en.wikipedia.org/wiki/cross_product

بعد مزيد من الفحص لما تفعله ، يبدو أنك ترغب في شيء على غرار:

function multiply_arr($a, $b)
{
  return array($a['x'] * $b['x'], $a['y'] * $b['y'], $a['z'] * $b['z]);
}

مرة أخرى ، سيتعين عليك وضع وظيفتك الخاصة ، ويجب عليك القيام ببعض التحقق من الأخطاء في حالة عدم تعريف القيمة.

3D Captcha لديه ما تبحث عنه. قد تحتاج إلى القيام ببعض التحقق من الأخطاء على الرغم من ذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top