1

javascript 関数を php に変換しようとしていますが、配列に問題があります。配列要素を反復処理して、それらすべてに特定の量を掛ける必要がありますが、値は変更されていません。私の構文 $coordinates_p[i][0] *= $scale; が原因だと確信しています。正しくありませんが、どうあるべきかわかりません!

テストコード:

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

?>
4

3 に答える 3

6

コードを変更するだけです

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

$coordinates_p[$i][0] *= $scale;
$coordinates_p[$i][1] *= $scale;
于 2010-11-17T19:39:18.580 に答える
1

どの程度「深く」翻訳したいかによって異なります

浅い - すべての変数の前に $ を置きます

より深い - 変数の前に $ を置き、while ループを foreach に変更し、print を echo に変更します

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

それらはそれぞれ実行されますが、それらの while ループを実行する場合、実際には PHP を使用していません。より極端な例として、「python」タグを使用して多数の while ループを含むコードを投稿し、単純化できるかどうかを尋ねます。

foreach ループとエコーは慣用的な php ですが、ループと印刷のみが機能します。

于 2010-11-17T19:56:50.687 に答える
1

あなたのエラーは

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

i ではなく $i を使用する必要があります。

そのようです:

while (isset($coordinates_p[$i])) {
    $coordinates_p[$i][0] *= $scale;
    $coordinates_p[$i][1] *= $scale;
    $i++;
}
于 2010-11-17T19:48:55.950 に答える