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

On dirait que vous souhaitez faire des produits ou des produits croix de points. Est-ce le cas? – zzzzBov

+0

Je pense que oui:) – Mohammad

Répondre

2

Si vous souhaitez multiplier des clés similaires ensemble, vous aurez besoin d'obtenir une liste des clés. array_keys semblerait être juste la fonction pour cela.

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 
} 

Cela (je l'espère) travailler pour un jeu de clés vous main dans, non seulement x, y et z.

0

Vous devez utiliser une bibliothèque ou définir le produit croisé vous:

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

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

Après un examen plus approfondi de ce que vous faites, il semble que vous souhaitez quelque chose le long des lignes de:

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

à nouveau, vous devrez faire votre propre fonction, et vous devez faire une erreur de vérification en cas de la valeur est indéfinie.

0

3D Captcha a obtenu ce que vous recherchez. Cependant, vous devrez peut-être faire quelques vérifications d'erreur.

1

Vous pouvez utiliser array_map et abus bcmul à cet effet:

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