Domanda

Sto cercando di tradurre una funzione javascript in PHP, ma avendo alcuni problemi con i miei array. Ho bisogno di iterare gli elementi della matrice, tutti moltiplicando per un certo periodo, ma non è la modifica dei valori. Abbastanza sicuro è perché la mia sintassi $ coordinates_p [i] [0] * = $ scala; non è corretto, ma non sono sicuro di quello che dovrebbe essere!

Codice di prova:

<?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.";

?>
È stato utile?

Soluzione

Il codice ha solo bisogno di cambiamento da

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

a

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

Altri suggerimenti

Il tuo errore è in

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

dovrebbe usare $ i non i.

in questo modo:

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

Dipende da come "profondamente" che si desidera tradurre

  

Shallow - mettere un $ davanti ad ogni variabile

     

Deeper - mettere $ di fronte a variabili, modificare tali cicli while a foreach, il cambiamento di stampa eco

//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;
}

Faranno ogni esecuzione, ma non sei davvero utilizzando PHP se fate quelle cicli while. Per un esempio più estremo, il codice postale con un sacco di cicli while in su con un tag "pitone" e chiedere se può essere semplificata.

I cicli foreach ed Echo sono php idiomatica, cicli while e stampare solo funziona.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top