2011-12-21 3 views
1

私のデータベースから取得されているいくつかのデータを扱っています。これは2次元*配列に配置され、データベース内のデータのIDに基づいてインデックスを手動で設定します。PHP:配列の次の値と前の値を見つける "欠落している"インデックスがある場合

* 2次元以上ですが、2次元で作業する必要があります。私は、したがって、問題のアレイは、2次元作り、「結果」、それの一部で作業する必要があり、このアレイ内

Array 
(
    [error] => Boolean(false) 
    [results] => Array 
     (
      [1] => Array 
       (
        [0] => title1 
        [4] => title2 
       ) 
      [3] => Array 
       (
        [0] => title3 
        [1] => title4 
        [2] => title5 
       ) 
      [4] => Array 
       (
        [0] => title6 
        [1] => title7 
        [3] => title8 
       ) 
     ) 
) 

このは、問題の配列です。

私のスクリプトでは、いくつかのブードー・マジックが起こり、最初の配列のインデックスと2番目の配列のインデックスが伝えられ、次に2番目の配列から値が引き出されます。

「title5」という値を取得したいとします。私のスクリプトは、インデックス3を使用してインデックス2を使用する必要があると教えてくれます。

私はこれをすべて実行しましたが、これは私が立ち往生している次の部分です。試してみてください。

「title5」を取得した後、次のアイテムと前のアイテムのインデックスを取得したいので、この場合は「title4」と「title6」の両方を検索します。以前の値がない場合(最初に "title1"を引っ張ったとします)、偽のブール値のように、これを特定する方法が必要です。同様に、「次の」値も存在しない場合も同様です。例えば私が意味するインデックスを取得することで

title4 = 3 & 1title6 = 4 & 0

誰もが、私はこれをやって行くべきか任意のアイデアを持っていますか?私は必ずしも私のために仕事をする人を探しているわけではありませんが、いくつかの指針は非常に高く評価されます。その間、私は実験を続けます。ありがとう!

  • タイトル実際title1と呼ばれていない、title2などだから、僕は数をデクリメントして検索を行うことができません。 nullの次へ前へ場合は、その後、あなたのインデックスは、その後、それらの最初/最後のインデックスがそれぞれあり、そうでない場合、最終的にはそう

    $prev = null; 
    $last_was_value = false; 
    $next = null; 
    
    foreach ($foo['results'][$index1] as $index => $value) { 
        if($value == $some_result_value) { 
         $last_was_value = true; 
        } elseif($last_was_value == true && $next == null) { 
         $next = $index; 
        } elseif($last_was_value == false) { 
         $prev = $index; 
        } 
    } 
    

+0

次のインデックスと前のインデックスを探していると、正確に何を意味していますか? $ results [3] [2]にあるタイトル5を検索すると言っていますか? $ results [3] [1]と$ results [4] [0]に値があることを知りたいでしょうか?私はあなたのための簡単なスクリプトを叩くことができます私はあなたが探しているものを理解していることを確認したいです:) – DaOgre

+0

正確に。 '$ results [3] [2]'にタイトル5があると、 '$ results [3] [1]'と '$ results [4] [0]'に値があることを知りたいと思います。私はそれらの値が何であるかを知る必要はありませんが、私はインデックスを知る必要があります。 –

答えて

1

私は実際の解決方法を得るために@Jonathan Richの答えを少し編集しました。ここで、$firstIndex$secondIndexは私がすでに知っている2つの指標です。

//my already known indexes 
$firstIndex = 3; 
$secondIndex = 2; 
// 
$prevIndex1 = null; 
$prevIndex2 = null; 
$last_was_value = false; 
$nextIndex1 = null; 
$nextIndex2 = null; 
foreach ($articles['results'] as $index => $value) { 
    foreach ($articles['results'][$index] as $index2 => $value2) { 
     if (($index == $firstIndex) && ($index2 == $secondIndex)) { 
      $last_was_value = true; 
     } else if ($last_was_value == true) { 
      $nextIndex1 = $index; 
      $nextIndex2 = $index2; 
      break 2; 
     } else if ($last_was_value == false) { 
      $prevIndex1 = $index; 
      $prevIndex2 = $index2; 
     } 
    } 
} 
echo "<br />PREV: $prevIndex1 & $prevIndex2<br />"; 
echo "NEXT: $nextIndex1 & $nextIndex2<br />"; 
+0

Bah別の解決方法を入力する途中でしたが、これは基本的に同じことです。ここで直面する唯一の問題は、配列構造全体を実際に歩いているときに配列が非常に大きい場合です。 – DaOgre

+0

うまくいけば、私はあまり問題にならないはずです。私はこのアレイが数百のアイテムよりも大きくなるのを見ることはできません。あなたのソリューションがパフォーマンス/メモリの面で優れているのであれば、それを投稿しても構わないと思っています。もしうまくいくなら、私はそれを試して受け入れます。誰が知っていますか?配列:) –

0

確かに、これは低レベルのソリューションです。値は兄弟インデックスです。

+0

この返信いただきありがとうございますが、それは単一のディメンションでのみ動作しています。私はそれの背後にあるアイデアが好きですし、実際の解決策を試してみるためにその周りにおもしろくなります。 –

関連する問題