Проверка, содержит ли массив все элементы другого массива

m проектирование электротехнического приложения. Однако я'Я застрял на этом: у меня есть следующий массив


И у меня есть другой массив, но это одномерный.


Я хочу проверить, равен ли $ myStack какой-либо вложенный массив массива $ GroupOfEight. (Порядок номеров не важен. Сценарий должен просто проверять, все ли элементы содержатся.не важно, если их порядок такой же или нет. )

Вот что ядо сих пор сделали, чтобы решить проблему:

 Asad Saeeduddin12 окт. 2012 г., 23:29
Вы назначили $ Stackarray где-нибудь? Кроме того, вы ненужно две петли; один в порядке.
 Asad Saeeduddin12 окт. 2012 г., 23:42
первый цикл проверяет все значения GroupOfEight
 mozcelikors12 окт. 2012 г., 23:39
да, но мне нужно проверить это для всех строк GroupOfEight

Ответы на вопрос(6)

Решение Вопроса

Учитывая ваши образцы массивов, результат этого будет:

> 0

Если у вас должен был быть только один вывод числа, это должно сделать это:

 Asad Saeeduddin12 окт. 2012 г., 23:41
когда вы запускаете array_intersect, это возвращает массив, заполненный значениями, присутствующими в обоих.
 Asad Saeeduddin12 окт. 2012 г., 23:55
Хорошо, если вы уверены, что только один член GroupOfEight соответствует, это выведет индекс этого.
 Asad Saeeduddin12 окт. 2012 г., 23:59
Казалось бы, он требует, чтобы вывод печатался как одно целое число, несмотря на то, что возможно несколько совпадений. Я буду изменять, чтобы вернуть только первый индекс.
 mozcelikors12 окт. 2012 г., 23:51
Это не то, что я спрашиваю на самом деле, он должен дать только 1 номер индекса. например stackArray равен 0,1,3,2,4,1,2,3 и должен найти GroupOfEight [N], который совпадает с теми же номерами, независимо от порядка чисел. Я должен получить N, если есть соответствующий случай. Пожалуйста помоги. Спасибо
 mozcelikors13 окт. 2012 г., 00:20
Чистое решение. вы'мы сделали это большое спасибо
 Asad Saeeduddin13 окт. 2012 г., 00:40
 mozcelikors13 окт. 2012 г., 00:07
Кажется, это работает, единственная проблема не в том, что я тоже могу получить 0 номер индекса. Поэтому, когда я даю значения $ stackArray, которые не удовлетворяют программе, выдает 0. Итак, как сделать 0 отличным от ложного случая.
 mozcelikors13 окт. 2012 г., 00:18
В любом случае, это лучший ответ. Если вы можете разобраться в этом ложном случае, пожалуйста, напишите здесь. Я'Я новичок в алгоритмах и функциях массива, поэтому мне нужно попрактиковаться в этом. Я ценю всю вашу помощь.
 mozcelikors12 окт. 2012 г., 23:37
Кажется, ошибка исчезла, но позвольте мне кое-что спросить. Как проверить $ stackArray для каждого индекса в $ GroupOfEight и вернуть номер индекса, если он есть. Это полностью решит мою проблему и сэкономит мне время. Благодарю.
 Asad Saeeduddin13 окт. 2012 г., 00:09
на самом деле, он не должен ничего выводить, если вы указали ложный случай позвольте мне проверить это.
 Terry Seidler12 окт. 2012 г., 23:57
$i затем' ты ищешь. Этот ответ будет хорошо работать для вас.
 Asad Saeeduddin12 окт. 2012 г., 23:47
Я отредактировал это, чтобы также повторить число. Так что если вы получаете true0true1false2true3 ... это означает, что stackArray соответствует 0,1,3 и т. Д. Очевидно, вы хотите сделать что-то лучше, чем просто отобразить индекс.
 Asad Saeeduddin13 окт. 2012 г., 00:18
Да, была проблема, мне пришлось проверять перекрестки в обоих направлениях. Исправлено, вотиграть на скрипке
 mozcelikors13 окт. 2012 г., 00:36
Позвольте мне спросить вас еще одну вещь, Асад. Я хочу расширить $ stackArray. Как преобразовать код в этот случай: когда мы даем дополнительные элементы в stackArray, он все равно должен выбрать наиболее подходящую группу и дать индексный номер. Извините, если я не ясно.

Подсчитайте сумму $ GroupOfEight [$ i]

Подсчитайте сумму $ myStack

если итоги равны:

В цикле -

если $ myStack [$ c] равен in_array ($ GroupOfEight [$ i]): $ равно = 1

иначе $ равно = 0; выход;

если $ равно == 1 -> массивы идентичны

 user138632012 окт. 2012 г., 23:36
пожалуйста, лучше отформатируйте код и используйте пример кода вокруг фрагментов кода.
 rinchik12 окт. 2012 г., 23:37
Это не код, это алгоритм.

Ты можешь попробовать :

$searchKeys = array();
foreach ( $GroupOfEight as $key => $values ) {
    (count(array_intersect($values, $myStack)) == count($myStack)) and $searchKeys[] = $key;
}

#Output all keys it found same match
var_dump($searchKeys);

#OR Output Each Array it found a match
foreach($searchKeys as $key)
{
    var_dump($GroupOfEight[$key]);
}
 Baba12 окт. 2012 г., 23:50
@mozcelikors ты видишь разницу ???
 Baba13 окт. 2012 г., 00:00
@mozcelikors я тебя сейчас понимаю .. я знаю почему ты хочешь1 ...
 mozcelikors12 окт. 2012 г., 23:47
Предупреждение: array_intersect () [function.array-intersect]: Аргумент # 2 не является массивом в \ scripts \ script.php в строке 1771 array (0) {} Это ошибка, которую я получил
 Baba12 окт. 2012 г., 23:57
@mozcelikors но0,1,3,2,4,1,2,3 нет в списке массивов выше .. почему он должен показывать1 ??? Если я понимаю вашу логику, я чувствую боль, я могу придумать что-то простое
 Baba13 окт. 2012 г., 00:07
@mozcelikors нет места где12 а также3 находятся в одном массиве ... так как0,1,2,3,4,12,3 в$GroupOfEight  ?? также не используюecho добавляю все ключи к$searchKeys для тебя
 mozcelikors12 окт. 2012 г., 23:44
(count (array_intersect ($ values, $ myStack)) == count ($ myStack)) и $ searchKeys [] = $ key; Эта линия сталкивается с проблемой
 mozcelikors13 окт. 2012 г., 00:02
Я привел 0,1,3,2 .. в качестве примера. Позвольте мне повторить это: Думайте о $ stackArray как 0,1,3,2,4,5,7,6. Это также $ GroupOfEight [0]. Я должен получить "0" номер (это номер индекса) в этом случае. Но если порядок перемешивается следующим образом: $ stackArray = 0,1,2,3,4,12,3. (Который не содержит $ GroupOfEight), то одно эхо "не удовлетворены"; выхода достаточно. Я надеюсь, что это ясно.
 Baba12 окт. 2012 г., 23:45
Работает нормально ...codepad.viper-7.com/M718f0   также смcodepad.org/JUZdy1zF .. какую версию PHP вы используете ???
 mozcelikors12 окт. 2012 г., 23:54
Да, я неправильно набрал мой стек, я вижу. но это то, что я ищу: он должен давать только 1 номер индекса. например stackArray равен 0,1,3,2,4,1,2,3 и должен найти GroupOfEight [N], который совпадает с теми же номерами, независимо от порядка чисел. Я должен получить только 1 N номер, если есть соответствующий случай. Пожалуйста помоги. Спасибо
 Baba13 окт. 2012 г., 00:02
@mozcelikors это то, что вы хотитеcodepad.org/yih5j7cl
 Baba12 окт. 2012 г., 23:48
Обратите внимание, что я использовал$myStack ???? У вас есть и $ stackArray, и $ myStack ... я уверен, что именно здесь все упущено

Вы сравниваетеcount этого недостаточно, так как числа могут быть изменены. Попробуй это:

// Static Array
$GroupOfEight = array (
    array(0,1,3,2,4,5,7,6),
    array(4,5,6,7,16,12,13,14),
    array(12,13,15,14,8,9,11,10),
    array(2,6,14,10,3,7,15,11),
    array(1,3,5,7,13,15,9,11),
    array(0,4,12,8,1,5,13,9),
    array(0,1,3,2,8,9,11,10)
    );

$myStack = array(0,1,3,2,4,5,7,6); //Dynamic, gets value by POST method.

$containsSearch = false;
foreach($GroupOfEight as $key => $value){
    if ($myStack == $value) {
        $containsSearch = true;
    }

}

var_dump($containsSearch);

В исходном подходе неправильно то, что вы перебираете GroupOfEightдважды, У вас есть две петли.

Сначала вы выбираете каждый массив в GroupOfEight, а во втором цикле for вы просматриваете каждое значение массива.

Если вы хотите использовать свой оригинальный подход, избавьтесь от дополнительного цикла for:

echo "Hello, World!";
$GroupOfEight = array (
              array(0,1,3,2,4,5,7,6),
              array(4,5,6,7,16,12,13,14),
              array(12,13,15,14,8,9,11,10),
              array(2,6,14,10,3,7,15,11),
              array(1,3,5,7,13,15,9,11),
              array(0,4,12,8,1,5,13,9),
              array(0,1,3,2,8,9,11,10)
              );

$myStack = array(0,1,3,2,4,5,7,6); //Dynamic, gets value by POST method.


for($i=0; $i

Нам не нужны петли. Попробуй это


Output0

Замечания: Выход$key расположение массива в $ GroupOfEight, т. е. ($ GroupOfEight [0])

Ваш ответ на вопрос