2011-11-23 4 views
0

J'ai un tableau avec ces valeurs:avec * =

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 

Et je veux pour chaque groupe la multiplication de chaque ligne comme:

1*0.125*05*3 

J'essaie ce code:

$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++; 
    } 
} 

mais j'ai 0 pour chaque ligne de multiplication.

Le code fonctionne bien avec + =, mais:

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

est différent de

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

Toute idée?

Répondre

2

Pouvez-vous pas seulement faire

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

print_r($final); 

Quels sont les résultats dans

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

Alternativement, si vous voulez continuer à faire votre chemin:

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

J'ai enlevé le -1 parce que cela voulait dire qu'il a manqué le dernier élément prendre 1*5*8*7 par exemple. Votre façon = 40 parce que le 7 n'a jamais été multiplié. Ce qui précède produit le même résultat.

+0

dieu, cela fonctionne parfaitement. Merci! –

+0

Pas de problème. Également ajouté une version de votre code qui produit le même résultat mais n'est pas lisible imo :) –

1

L'élément neutre pour la multiplication est 1, pas 0. vous remplissez votre tableau final avec des zéros avec cette déclaration

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

et, évidemment, quand vous faites

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

tout sera égal à zéro aussi. Ainsi, vous devez remplacer la première ligne avec celui-ci:

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

Oui, ça marche, mais il y a probablement une autre erreur. Par exemple 8 * 1 * 5 * 7 devrait être 280 et j'en ai 1400. –

+0

@loops Parce que chaque fois dans la boucle en J, vous multipliez 3 nombres qui ne sont probablement pas ce que vous voulez. Débarrassez-vous de l'un des deux éléments sur la droite de * = –

0

0 * tout est 0. Vous initialisé votre tableau à tous 0.