2010-11-05 23 views
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); 
+0

这听起来像你想要做的跨产品或点的产品。是这样吗? – zzzzBov 2010-11-05 18:56:10

+0

我认为是的:) – Mohammad 2010-11-05 19:11:37

回答

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。

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

再次,你将不得不作出自己的功能,你应该做一些错误检查,以防万一值未定义。

0

3D Captcha已得到你要的东西。虽然你可能需要做一些错误检查。

1

你可以使用array_map和滥用bcmul为了这个目的:

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