2010-08-13 88 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; 
    } 
?>