2016-06-22 3 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_b или A_B_C

Переменные и константы

  • Длина массива может варьироваться в каждом втором измерении массива
  • Строки можно повторить несколько раз, и это не имеет никакого отношения по логике
  • Однако константа состоит в том, что тест для объединения двух строк или трех строк всегда является последовательным (например, всегда A_B или A_B_C, а не A_D или A_D_J, если это имеет смысл)
  • Последовательность перемещается по одной букве каждый раз, например. (B_C_D, B_C и B), затем (C_D_E и т. д.)
  • Когда в массиве недостаточно строк для продолжения тестирования 2 или 3 комбинированных слов, тогда тест должен просто запустить на 1 строку

То, что я пытаюсь сделать, и желаемый результат

мне нужна помощь с синтаксисом массива, чтобы помочь мне построить код в логический аргумент 3 уровня в цикле

что-то вроде этого:
IF A_B_C существует в myTable что-то делать
ELSE IF a_b существует что-то еще
ELSE ЕСЛИ существует сделать еще одну вещь
ELSE вернуть пустой

Я не могу вполне понять, однако, как манипулировать выше массив так, чтобы прийти к переменным

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

(я могу получить thirdTest)

То, что я пытался

через получение полезной помощи по другим вопросам массива, я попытался прохождение $ туАггау через петлю Еогеаспа следующим образом:

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

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

Однако это занимает первую строку каждого массива первого уровня.

EDIT:

Я экспериментировал с 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

Ваших примеров DON» t, похоже, совпадают с '$ myArray', которые вы предоставили в начале. Можете ли вы убедиться, что ваши примеры под ** Переменные и константы ** соответствуют данным '$ 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

Кроме того, я экспериментировал с do while и array_slice и могу почти туда добраться, но вместо того, чтобы зацикливать, следуя A_B_C, B_C_D и т. Д. ..., он идет A_B_C, B_C_D_E, C_D_E_F и т. Д. ... и я не совсем уверен, почему , Но если у вас есть комментарии/предложения, которые бы очень помогли мне учиться – Jacob

+0

Я отредактирую исходное сообщение – Jacob

Смежные вопросы