Как умножить числовые значения массива схожих ключей в Php? - PullRequest
0 голосов
/ 05 ноября 2010
   $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 ]

2 голосов
/ 05 ноября 2010

Если вы хотите умножить любые похожие ключи вместе, вам нужно будет получить список ключей. 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.

1 голос
/ 28 февраля 2011

Вы можете использовать array_map и злоупотреблять bcmul для этой цели:

array_map( 'bcmul', $a, $b ) == $a * $b
0 голосов
/ 05 ноября 2010

3D Captcha имеет то, что вы ищете.Возможно, вам придется сделать некоторые проверки на это, хотя.

0 голосов
/ 05 ноября 2010

Вам придется использовать библиотеку или определить перекрестный продукт самостоятельно:

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

Опять же, вам придется создать свою собственную функцию, и вам следует выполнить некоторую проверку ошибок в случае, если значение не определено.

...