2010-11-05 107 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