2012-02-15 4 views
0

さまざまな長さの配列をループする関数を作成しようとしています。ループ中に関数を実行して、直前の項目(現在のキーから1を引いた項目)が配列内の項目と一致するかどうかを確認します。ここで は、配列の2つの例は次のとおりです。異なる長さの配列をループしてループ内で関数を実行する方法

$terms1 = array(
    0 => 'MEL', 
    1 => 'Appliances', 
    2 => 'Clothes Dryers', 
    3 => 'Clothes dryers - electric' 
); 

$terms2 = array(
    0 => 'Clothes Dryers', 
    1 => 'Clothes dryers - electric' 
); 

そしてここでは、ループ内で実行される関数である...この関数は値を返しますし、私はすぐに配列しているものにそれを比較します以前の場所(現在のキーマイナス1)。これはdbから引き出されます。

getParent($terms1[3]); //Would output the value I want to compare to $terms1[2] 

私はこのような何かしようとしました:私は再帰関数が必要だと思う

$fail = null; 
foreach(array_reverse($terms1, true) as $key => $value){ 
    if($key > 0){ 
     $priorkey = $key - 1; 
     if(getParent($terms1[$key]) != $terms1[$priorkey]){ 
      $fail = true; 
     } 
    } 
} 
return $fail; 

を...右方向に任意のヘルプやnudgesをいただければ幸いです。

+0

配列に最後に入力した項目が、現在入力しようとしている項目と同じ値になっているかどうかを確認しようとしていますか?それは現在の項目の配列全体をチェックする方が良いでしょうか? – crush

+0

あなたの機能を試したときに何が起こったのですか?どのような誤った行動を観察しましたか? –

+0

@crush - 正確ではありません。 getParentは私のデータベースから値を返し、この値を直接前の要素と比較したい(現在のキーから1を引いた値)。 –

答えて

0
$prev = null; 
foreach ($terms1 as $v) { 
    if ($prev == getParent($v)) { 
     $fail = true; 
     break; 
    } 

    $prev = $v; 
} 
0

あなたのコードが動作しない理由を私は理解していないが、あなたは$fail = true;break;を追加する場合、それはより速く実行し、同じ結果を返します。最初の失敗後に残りを確認する必要はありません。

+0

これも当てはまります。 – crush

関連する問題