Как умножить элементы массива php - PullRequest
1 голос
/ 17 ноября 2010

Я пытаюсь перевести функцию javascript в php, но у меня проблемы с массивами. Мне нужно перебрать элементы массива, умножив их все на определенную величину, но это не меняет значения. Я уверен, что это потому, что мой синтаксис $ заключает в себе координаты $ [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.";

?>

Ответы [ 3 ]

6 голосов
/ 17 ноября 2010

Ваш код просто нужно изменить с

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

до

$coordinates_p[$i][0] *= $scale;
$coordinates_p[$i][1] *= $scale;
1 голос
/ 17 ноября 2010

Зависит от того, как «глубоко» вы хотите перевести

Shallow - ставьте $ перед каждой переменной

Глубже - поместите $ перед переменными, измените циклы while для foreach, измените печать на 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;
}

Каждый из них будет работать, но вы на самом деле НЕ ИСПОЛЬЗУЕТЕ php, если делаете эти циклы while. Для более экстремального примера, отправьте код с большим количеством while с тегом «python» и спросите, можно ли его упростить.

циклы foreach и echo - идиоматические php, тогда как циклы и печать работают.

1 голос
/ 17 ноября 2010

Ваша ошибка в

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