2010-11-17 32 views
1

J'essaye de traduire une fonction javascript en php mais j'ai quelques problèmes avec mes tableaux. J'ai besoin d'itérer sur les éléments du tableau, en les multipliant tous par une certaine quantité, mais cela ne change pas les valeurs. Assez sûr que c'est parce que ma syntaxe $ coordinates_p [i] [0] * = $ scale; n'est pas correct, mais je ne suis pas sûr de ce qu'il devrait être!Comment multiplier les éléments de php array

Code d'essai:

<?php 

print "Starting.<br/>"; 

$scale = 100; 

$coordinates_p = array(); 

$i = 0; 
$x_coordinate = 1; 
$y_coordinate = 2; 
while ($i <= 1) { 
    $coordinates_p[$i] = array(0 => $x_coordinate, 1 => $y_coordinate); 
    $x_coordinate += 1; 
    $y_coordinate += 2; 
    $i++; 
} 

print "Unscaled: "; 
print_r ($coordinates_p); 
print "<br/>"; 

$i = 0; 
while (isset($coordinates_p[i])) { 
    $coordinates_p[i][0] *= $scale; 
    $coordinates_p[i][1] *= $scale; 
    $i++; 
} 

print "Scaled: "; 
print_r ($coordinates_p); 
print "<br/>"; 

print "Finished."; 

?> 

Répondre

6

Votre code a juste besoin de changer de

$coordinates_p[i][0] *= $scale; 
$coordinates_p[i][1] *= $scale; 

à

$coordinates_p[$i][0] *= $scale; 
$coordinates_p[$i][1] *= $scale; 
+0

Continuez à manquer ceux! Mais malheureusement, ça ne marche toujours pas. – Mike

+1

@Mike alors vous avez également manqué celui de l'isset au-dessus de ces deux. Activez toujours 'error_reporting (-1)' sur les serveurs de développement et assurez-vous de définir votre directive 'display_errors' dans php.ini et PHP vous parlera de ces choses. – Gordon

+0

Mon diable, il y en avait un autre que j'avais raté. Fonctionne bien maintenant! – Mike

1

Votre erreur est dans

while (isset($coordinates_p[i])) { 
    $coordinates_p[i][0] *= $scale; 
    $coordinates_p[i][1] *= $scale; 
    $i++; 
} 

il devrait utiliser $ i pas i.

comme ceci:

while (isset($coordinates_p[$i])) { 
    $coordinates_p[$i][0] *= $scale; 
    $coordinates_p[$i][1] *= $scale; 
    $i++; 
} 
+0

Oui, merci. Cela m'apprendra à couper et coller à partir de javascript! – Mike

+0

La réponse de jon_darkstar ici est aussi une bonne note - je ne faisais que corriger votre code. Utiliser l'approche foreach serait "meilleur" php. Même une boucle for (bornée) serait une meilleure approche qu'une boucle while potentiellement infinie. –

1

dépend de la façon "profondément" que vous voulez traduire

peu profond - mettre un $ devant chaque variable

Deeper - mettre $ devant des variables, changez celles-ci en boucles pour foreach, changez l'impression en écho

//before 
$i = 0; 
while (isset($coordinates_p[i])) { 
    $coordinates_p[i][0] *= $scale; 
    $coordinates_p[i][1] *= $scale; 
    $i++; 
} 

//Better PHP form 
foreach($coordinates_p as $current) 
{ 
    $current[0] *= $scale; 
    $current[1] *= $scale; 
} 

Ils vont chacun fonctionner, mais vous n'utilisez pas vraiment php si vous faites ces boucles en boucle. Pour un exemple plus extrême, le code postal avec beaucoup de temps boucle avec une balise "python" et demande s'il peut être simplifié.

foreach boucles et l'écho sont php idiomatique, tandis que les boucles et l'impression ne fonctionne que.

+0

Ok, merci. Jamais vraiment appris n'importe quel langage de programmation correctement, juste tremper autour et essayer d'obtenir le résultat final dont j'ai besoin. Cela vaudrait probablement la peine d'y consacrer du temps, mais il semble que je le fasse de plus en plus récemment. Merci pour le conseil! – Mike