如何在 Php 中将相似键的数值数组值相乘?

发布于 2024-10-01 00:57:14 字数 216 浏览 11 评论 0原文

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

甜点 2024-10-08 00:57:14

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

If you want to multiply any similar keys together, you will need to get a list of the keys.
array_keys would appear to be just the function for that.

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
}

This will (hopefully) work for any set of keys you hand in, not just x, y, and z.

鹿港巷口少年归 2024-10-08 00:57:14

您可以使用 array_map 并滥用 bcmul 来达到此目的:

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

You could use array_map and abuse bcmul for this purpose:

array_map( 'bcmul', $a, $b ) == $a * $b
执着的年纪 2024-10-08 00:57:14

您必须使用库或自己定义叉积:

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

同样,你必须创建自己的函数,并且你应该做一些错误检查值是否未定义。

You'll have to use a library or define the cross product yourself:

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

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

After further examination of what you're doing, it looks as though you'd like something along the lines of:

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

again, you'll have to make your own function, and you ought to do some error checking in case a value is undefined.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文