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 (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 回答
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 循环和 echo 是惯用的 php,而循环和打印仅适用。

于 2010-11-17T19:56:50.687 回答