2010-08-13 109 views
0

我有一个循环(基于数组 - 可以增长但不是太多 - 最多6个键)例如:array('12','34','56',48')。我想要做的是循环数组,然后THEN循环再次找到“前一个”数组val。PHP我可以做这个循环吗?

例如,key[0] = 12key[1] = 34然后key[0] = 12key[2] = 56然后key[1] = 34

数组的值是从数据库ID和我需要(希望)到基于“当前键”运行查询和以前的关键。

任何想法 - 可以做到吗?

+1

我想你失踪阵列的点。或者你还没有足够好地描述你的问题。 – 2010-08-13 15:52:53

+0

你可以更多地阐述你所寻找的例子吗?例如拼写出2个循环。 – webdad3 2010-08-13 15:55:54

回答

1

我不认为这里真的需要多个循环。我将使用next()prev()current()函数的阵列的内部指针。

0

如果我理解正确,你想这样做。

for($i=1; $i < count($array); $i++) { 
    $currentValue = $array[$i]; 
    $previousValue = $array[$i-1]; 

    // Here you can run a query based on the current and the previous value 
} 

例如,以$arrayarray(12,34,56,48)你将有3次迭代,其中$currentValue$previousValue将有以下的值:

  1. 第一次迭代:$ CurrentValue的= 34,$ PREVIOUSVALUE = 12
  2. 第二次迭代:$ currentValue = 56,$ previousValue = 34
  3. 第三次迭代:$ currentValue = 48,$ previousValue = 56
+0

由于上述情况,您会错过使用当前值的零索引 - 这可能会阻止某些需要的操作。 – 2010-08-13 15:54:56

+0

如果要求使用当前值和前一个值执行查询,则必须以第二个项目开始,否则上一个值不存在。无论如何,我明白这取决于所需的具体行为,我认为我提到的那个。 – 2010-08-13 15:59:22

0
<? 
$val = 56; 
$data = array(12, 34, 12, 56, 34); 
for($i = 0; $i < count($data); $i++) { 
    if($data[$i] == $val) { 
    if($i == 0) die("No previous"); 
    $previous = $data[$i-1]; 
    } 
} 

echo "Previous to $val was $previous"; 

或更好,但使用array_search() 找到索引给出$ VAL

3
$num_elem = count($array); 
for ($i = 0; $i < $num_elem; $i++) 
{ 
    $curr_val = $array[$i]; 
    $prev_val = (0 == $i) ? null: $array[$i-1]; 
} 
2

不像其他的解决方案,我将使用基于索引的访问建议

在php中,关键不一定按顺序。例如,如果在阵列上调用natsort,关系将保持不变,但阵列本身实际上是重新排序的,导致违反直觉的结果。 (见Why isn't natsort (or natcasesort) working here?

我会使用类似:

<?php 
    $ids = array('12','34','56','48'); 
    $previous = false; 
    foreach($ids as $id) 
    { 
    echo "current: $id\n"; 
    echo "previous: $previous\n"; 
    $previous = $id; 
    } 
?>