2016-06-22 23 views
0

我想運行一些邏輯測試並匹配一個字符串對數據庫的列表,但需要與我有數組的幫助。加入循環中的數組中的3個值

問題

我有一個數組:

$myArray = 
array([0] (
    array [0] ([0] A, [1] B, [2] C, [3] H) 
    array [1] ([0] A, [1] D, [2] G, [3] H, [4] L) 
    array [2] ([0] D, [1] Z, [2] J, [3] K, [4] O, [5] X) 
) 
array([1] (
    array [2] ([0] F, [1] Y, [2] W, [3] H, [4] L) 
) 
array([2] (
    array [0] ([0] O, [1] T, [2] C, [4] O, [5] X) 
    array [1] ([0] U, [1] E, [2] E, [3] D) 
)) 

我試圖這個陣列對,結合圖1,2和3的字符串與組合的列表中,以測試字符串「_」在表。
實施例:A或A_B或A_B_C

變量和常量

  • 陣列長度可在每個陣列的第二維度的變化
  • 字符串可以重複幾次,並且它沒有軸承上的邏輯
  • 恆定然而是,測試到兩個字符串或三個串組合始終是連續的(例如,始終A_B或A_B_C和不A_D或A_D_J如果是有道理的)
  • 序列移動每次例如一個字母。第一次測試(A_B_C,A_B和A),然後測試(B_C_D,B_C和B),然後(C_D_E等等)
  • 當數組的字符串不足以繼續測試2或3個組合單詞時,測試應該只是1串運行

我所試圖做的和預期的結果

我需要用數組語法幫助,幫助我建立的代碼爲3級的邏輯論證在一個循環

像這樣:
如果A_B_C存在於myTable中,請執行以下操作
ELSE IF A_B存在如果存在做另一件事
否則返回做別的事情
ELSE空白

我不能完全弄清楚但是如何處理上述陣列,以便在變量到達

$firstTest = 'A_B_C'; <br> 
$secondTest = 'A_B'; <br> 
$thirdTest = 'A'; <br> 

(我可以得到thirdTest)

我試了一下

通過接收其他陣列問題一些有用的幫助,我試圖傳遞$ myArray的通過foreach循環如下:

foreach ($myArray as $newArray) { 
$i = 0; 
$j = $i++; 

foreach($newArray as $key=>$val) { 
    $impArray = array($val[$i],$val[$j]); 
    echo implode('_', $impArray); 
} 
} 

但是這需要每個第一級陣列的第一個字符串。

編輯:

我一直在嘗試array_slice和同時做,幾乎可以到達那裏,但模式並不完全遵循3X串組合;相反,它從3個字符串增加到4個字符串,5個字符串等......我不知道爲什麼。

這裏是我的最新嘗試:

foreach ($myArray as $newArray => $val) { 
    $x = 0; 
    $z = 3; 
    $route = array(); 

    do { 

     $route = array_slice($val, $x , $z); 
     $imp_route = implode('_', $route); 
     echo $imp_route; 
     $x++; 
     $z++; 
    } while ($z <= count($val)); 
} 
+0

你的例子別t似乎與您在開始提供的'$ myArray'對齊。你可以確保你的例子** Variables和Constants **匹配給定的'$ myArray'嗎?例如,我沒有看到任何會產生「B_C_D」組合的集合。 – mopo922

+0

是的,我想盡可能在​​V&C儘可能清晰。爲了顯示這些是順序的,我指的是A_B_C。但如果你願意,序列必須運行,A_B_C,B_C_H,然後在陣列[1] A_D_G,D_G_H等... – Jacob

+0

這有助於,謝謝。 – mopo922

回答

1

也許有一個華麗的方式做到這一點,但這種方式使得你要完成它清楚:

foreach ($myArray as $newArray) { 
    foreach ($newArray as $valuesArray) { 
     for ($i=0; $i<count($valuesArray); $i++) { 
      // A_B_C 
      if (isset($valuesArray[$i+2])) { 
       echo $valuesArray[$i] . '_' . $valuesArray[$i+1] . '_' . $valuesArray[$i+2]; 
      } 
      // A_B 
      if (isset($valuesArray[$i+1])) { 
       echo $valuesArray[$i] . '_' . $valuesArray[$i+1]; 
      } 
      // A 
      echo $valuesArray[$i]; 
     } 
    } 
} 
+0

感謝這段代碼,它幾乎可以工作,但它將$ myArray中的每個字符串分解爲單個字母。我不明白爲什麼它從代碼中這樣做呢? – Jacob

+0

此外,我一直在嘗試做while和array_slice,幾乎可以到達那裏,而不是像循環A_B_C,B_C_D等循環,它會變成A_B_C,B_C_D_E,C_D_E_F等......我不太清楚爲什麼。但是,如果您有任何意見/建議,那將極大地幫助我學習 – Jacob

+0

我將編輯原始帖子 – Jacob