Проверьте, содержит ли массив другой массив с PHP
Возможный дубликат:
Проверка, содержит ли массив все элементы другого массива
Я уже публиковал что-то подобное в Stackru, но ответы меня не полностью удовлетворяют. Вот почему я снова публикую вопрос, но все время меняю вопрос.
Некоторые люди помогли мне построить функцию, которая проверяет, array($GroupOfEight[$i])
это элемент многомерного array($GroupOfEight)
равно другому массиву ($stackArray), не учитывая порядок чисел в массивах.
Тем не менее, мне нужно проверить, является ли array($stackArray)
содержит любой другой array($GroupOfEight[$i])
в многомерном array($GroupOfEight)
или нет, это означает, что основной 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);
?>
Любые логические идеи или решения будут любезно оценены. Благодарю.
2 ответа
Ты можешь попробовать
$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;
}