2010-04-28 49 views
0

在我上一篇文章中,我问: 如何使用“for”循环在php中创建动态增量变量?像明智的:$ track_1,$ track_2,$ track_3,$ track_4 .....等等....如何从for循环中增加变量中获得前一个值?

,其答案我选择

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

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

现在,如果我需要变量之前的值超过当前变量?

+2

'$ {'track_'。 ($ i-1)};'不够吗? – Matt 2010-04-28 09:09:00

+2

如果U可以粘贴这个回复在我的回答栏中我想接受它,它对我有效...... – 2010-04-28 09:12:45

+0

完成:) ........ – Matt 2010-04-28 09:16:24

回答

7
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]; 
    } 
} 
+0

+1指出数组。像这样使用变量变量通常是不好的设计的标志。 – deceze 2010-04-28 09:16:30

+0

阵列+1,所有解决方案中最好的 – 2010-04-28 09:18:34

1
if ($i != 0) 
{ 
    $prev = ${'track_' . ($i-1)} ; 
} 

2

我想简单的方法是使用两个变量。

$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);

2

我知道其他人都在说只是由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; 
} 
+0

Grt Point ..赞赏 – 2010-04-28 09:16:54

1

${'track_' . ($i-1)};会不够吗?

+0

虽然'$ {'track_-1'};'不存在,但会在第一个周期产生通知。 – 2010-04-28 09:18:17

+0

所以把它包装在if语句中.... – Matt 2010-04-28 09:21:17