Возможный дубликат:
Проверка того, содержит ли массив все элементы другого массива
Раньше я отправлял что-то вроде этого в Stackoverflow, но ответы не полностью удовлетворяют меня. Вот почему я снова задаю вопрос, но все время меняю вопрос.
Некоторые люди помогли мне создать функцию, которая проверяет, является ли array($GroupOfEight[$i])
который является элементом многомерного array($GroupOfEight)
равным другому массиву ($ stackArray), не считая упорядочения числа в массивах.
Тем не менее, мне нужно проверить, содержит ли упомянутый array($stackArray)
любой другой array($GroupOfEight[$i])
в многомерном array($GroupOfEight)
или нет, это означает, что основной array($stackArray)
может array($stackArray)
больше элементов, чем subarrays($GroupOfEight[$i])
.
Вот один рабочий код, который я собрал до сих пор, но его нужно изменить до версии, которую я хочу:
<?php $GroupOfEight = array ( array(0,1,3,2,4,5,7,6), array(4,5,6,7,15,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) ); $stackArray = array(0,4,12,1,9,8,5,13,9,2,5,2,10); /*$stackArray gets value with POST Method by URL parameter. This is just the example. As you see this array contains $GroupOfEight[4], and also it contains many other numbers.*/ /* The function given below checks if $stackArray equals any of the subarrays of $GroupOfEight. However, we want to check if $stackArray caontains any of the subarrays of function. If it does, function should return the index number, if it doesnt it should return -1.*/ function searcheight($stackArray,$GroupOfEight){ for($i=0; $i<count($GroupOfEight);$i++){ $containsSearch = (count(array_intersect($stackArray,$GroupOfEight[$i])) == count($stackArray) && count(array_intersect($stackArray,$GroupOfEight[$i])) == count($GroupOfEight[$i])); if($containsSearch){ return $i; //This specifies which index in GroupOfEight contains a matching array } } return -1; } // Calling the function that is given above. echo searcheight($stackArray,$GroupOfEight); ?>
Любые логические идеи или решения будут приветствоваться. Благодарю.
Можешь попробовать
$GroupOfEight = array( array(0,1,3,2,4,5,7,6), array(4,5,6,7,15,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)); $stackArray = array(0,4,12,1,9,8,5,13,9,2,5,2,10); function searcheight($stackArray, $GroupOfEight) { $list = array(); for($i = 0; $i < count($GroupOfEight); $i ++) { $intercept = array_intersect($GroupOfEight[$i], $stackArray); $len = count($intercept); if ($len % 4 == 0) { $list[$i] = $len; } } arsort($list); if (empty($list)) return - 1; return key($list); } echo searcheight($stackArray, $GroupOfEight);
Вывод
5
Это быстро:
function contains_array($array){ foreach($array as $value){ if(is_array($value)) { return true; } } return false; }