Как получить предыдущее значение из инкрементной переменной в цикле for? - PullRequest
0 голосов
/ 28 апреля 2010

В своем последнем посте я спросил: Как создать динамическую инкрементную переменную используя цикл for в php? например: $ track_1, $ track_2, $ track_3, $ track_4 ..... и так далее.

ответ которого я выбрал как

for($i = 0; $i < 10; $i++) {
  $name = "track_$i";
  $$name = 'hello';
}

и

for($i = 0; $i < 10; $i++) {
    ${'track_' . $i} = 'val'
}

Теперь, что, если мне нужно значение переменной, предшествующее текущей переменной?

Ответы [ 5 ]

7 голосов
/ 28 апреля 2010
for($i = 0; $i < 10; $i++) {
    ${'track_' . $i} = 'val'
    if($i != 0){
        $prev_val = ${'track_' . ($i - 1)}
    }
}

Но для этого гораздо лучше использовать массивы, предназначенные для этого приложения.

$tracks = array();
for($i = 0; $i < 10; $i++){
    $tracks[$i] = 'val';
    if($i != 0){
        $prev_val = $tracks[$i-1];
    }
}
2 голосов
/ 28 апреля 2010

Я знаю, что другие говорят, просто вычтите на 1, но что, если ваш список идет 1, 2, 4, 5, 8, 9? Предыдущее из 8 - это не 7, а 5, этот следующий метод (с небольшой модификацией, чтобы работать так, как вам нужно) предоставит способ получить истинное предыдущее значение, а не предполагаемое.

for($i = 0; $i < 10; $i++) {
    ${'track_' . $i} = 'val'
    if(!empty($last_val))
         // do what you want here

    // set a var to store the last value
    $last_val=$i;
}
2 голосов
/ 28 апреля 2010

Полагаю, самый простой способ - использовать две переменные.

$name2 = "track_0";
for($i = 1; $i < 10; $i++) {
  $name1 = $name2;
  $name2 = "track_$i";
  $$name1 = 'hello_previous';
  $$name2 = 'hello_this';
}

Или, если вы явно используете i = [0 ... 10] для генерации имени переменной, вы можете просто написать $name2 = "track_". $i; $name1 = "track_" . ($i - 1);

1 голос
/ 28 апреля 2010

${'track_' . ($i-1)}; не хватит?

1 голос
/ 28 апреля 2010
if ($i != 0)
{
  $prev = ${'track_' . ($i-1)} ;
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...