умножение на * = - PullRequest
       23

умножение на * =

0 голосов
/ 23 ноября 2011

У меня есть массив с этими значениями:

array
  0 => 
    array
      0 => int 1
      1 => float 0.125
      2 => float 0.5
      3 => float 3
  1 => 
    array
      1 => int 1
      2 => float 5
      3 => float 7
      0 => float 8
  2 => 
    array
      2 => int 1
      3 => float 3
      0 => float 2
      1 => float 0.2
  3 => 
    array
      3 => int 1
      0 => float 0.33333333333333
      1 => float 0.14285714285714
      2 => float 0.33333333333333

И я хочу для каждой группы умножение каждой строки, например:

1*0.125*05*3

Я пытаюсь этот код:

$final= array_fill(0, count($matrix), 0);
for ($i = 0; $i < count($matrix); $i++) {
    $a = 1;
    for ($j = 0; $j < count($matrix)-1; $j++) {
        $final[$i] *= $matrix[$i][$j]*$matrix[$i][$a];
        $a++;
    }
}

но я получил 0 для каждой строки умножения.

Код хорошо работает с + =, но:

1*0.125*05*3 = 0.1875 (this is the objective)

отличается от

1*0.125+0.125*0.5+*0.5*3 = 16875

Есть идеи?

Ответы [ 3 ]

2 голосов
/ 23 ноября 2011

Можете ли вы просто не делать

$final = array();
foreach( $matrix as $arr ) {
    $final[] = array_product( $arr );
}

print_r( $final );

Что приводит к

Array ( [0] => 0.1875 [1] => 280 [2] => 1.2 [3] => 0.015873015873015 )

В качестве альтернативы, если вы хотите продолжать делать это по-своему:

$final= array_fill(0, count($matrix), 1);
for ($i = 0; $i < count($matrix); $i++) {
    for ($j = 0; $j < count($matrix); $j++) {
        $final[$i] *= $matrix[$i][$j];
    }
}

Я удалил -1, потому что это означало, что он пропустил последний элемент, например, 1*5*8*7.Ваш путь = 40, потому что 7 никогда не умножался.Выше приведен тот же результат.

1 голос
/ 23 ноября 2011

Нейтральным элементом для умножения является 1, а не 0. Вы заполняете окончательный массив нулями с помощью этого оператора

$final= array_fill(0, count($matrix), 0);

и, очевидно, когда вы делаете

$final[$i] *= $matrix[$i][$j];

все будет равно нулю. Таким образом, вы должны заменить первую строку этой:

$final= array_fill(0, count($matrix), 1);
0 голосов
/ 23 ноября 2011

0 * все равно 0. Вы инициализировали свой массив всем 0.

...