如何在Php中乘以类似键的数值数组值?

时间:2010-11-05 18:52:41

标签: php arrays key matrix-multiplication

   $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);

4 个答案:

答案 0 :(得分:2)

如果您想将任何类似的密钥相乘,您需要获取密钥列表。 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。

答案 1 :(得分:1)

您可以使用array_map并滥用bcmul来实现此目的:

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

答案 2 :(得分:0)

您必须自己使用库或定义交叉产品:

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]);
}

再次,你必须自己创建函数,如果值未定义,你应该做一些错误检查。

答案 3 :(得分:0)

3D Captcha已经得到了你想要的东西。您可能需要对它进行一些错误检查。