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

4 に答える 4

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だけでなく、渡したキーのセットに対しても機能します。

于 2010-11-05T19:23:09.917 に答える
1

この目的のために、array_mapを使用してbcmulを悪用することができます。

array_map( 'bcmul', $a, $b ) == $a * $b
于 2011-02-28T01:36:41.243 に答える
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]);
}

繰り返しになりますが、独自の関数を作成する必要があり、値が未定義の場合に備えてエラーチェックを行う必要があります。

于 2010-11-05T18:59:53.830 に答える
0

3Dキャプチャはあなたが探しているものを持っています。ただし、エラーチェックを行う必要がある場合があります。

于 2010-11-05T19:10:56.223 に答える