2012-10-22 2 views
0

이 항목에 대해 게시하는 것은 이번이 세 번째입니다. 사용자 Baba는 매번 나를 도왔습니다. SO 웹 사이트에는 사용자 메시지 시스템이 없으므로 - 불행히도 - 나는 게시물 내에 질문하고 있습니다. 다시.배열이 다른 배열로 구성되어 있는지 확인

사용자 Baba의 도움을 받아 배열에 다른 배열이 있는지 확인하는 함수를 만들었지 만이 함수는 여러 번이를 결정하고 인덱스 목록을 만듭니다. 함수가 부족하고 내가 알아야 할 것은 함수가 예상과 같은 예외에서 -1을 반환하지 않는다는 것입니다. 함수는 관련이없는 값을 반환 할 수 있으며 함수는 일관성이 없습니다. 어떤 배열이 주 배열 ($ leftArray)와 일치하는지 검사하고 그 배열의 색인을 리턴하면됩니다. 일치하는 배열이 없으면 함수는 -1을 반환해야합니다.

이 코드를 검토하고 제발 도와주세요 :

<?php 
$leftArray = array(7,6,14,15,8,0,1,4,5,9); 
//contains $GroupOfFour[6] and $GroupOfFour[1], and some excess 
//numbers. Function should return array(6,1), If there is not a 
//matching case the function should return -1. 
//i've realised that the exception cases and the multiple 
//grouping does not work. 

$GroupOfFour = array (
        array(3,2,7,6), 
        array(7,6,15,14), 
        array(15,14,11,10), 
        array(1,3,5,7), 
        array(5,7,13,15), 
        array(13,15,9,11), 
        array(0,1,4,5), 
        array(4,5,12,13), 
        array(12,13,8,9), 
        array(0,4,12,8), 
        array(1,5,13,9), 
        array(3,7,15,11), 
        array(2,6,14,10), 
        array(0,1,3,2), 
        array(4,5,7,6), 
        array(12,13,15,14), 
        array(8,9,11,10), 
        array(0,2,8,10), 
        array(0,1,8,9), 
        array(1,3,9,11), 
        array(3,2,11,10), 
        array(0,4,2,6), 
        array(4,12,6,14), 
        array(12,14,8,10) 
        ); 

function searchFourTerms($leftArray, $GroupOfFour) { 
    global $GroupOfFour, $leftArray; 
    $len4 = count($leftArray); 
    $len4_carry = count($leftArray); 
    $list4 = array(); 
    for($i4 = 0; $i4 < count($GroupOfFour); $i4 ++) { 
     $intercept4 = array_intersect($GroupOfFour[$i4], $leftArray); 
     $len4 = count($intercept4); 
     if (count($intercept4) % 4 == 0) { 
      $list4[$i4] = $len4; 
     } 
    } 
    arsort($list4); 
    if (empty($list4) || ($len4_carry<4)) 
     return - 1; 
    return key($list4); 
} 

?> 
+0

이전 질문에 대한 링크를 추가하십시오 –

+0

이 포스팅은 실제로 다른 포스트 사이의 관계가 없습니다. 하지만 정말 도움이 필요해. 다음과 같은 경우 이전 질문을 확인하십시오. http://stackoverflow.com/questions/12936934/check-if-an-array-contains-another-array-with-php – mozcelikors

+0

그건 사실이 아닙니다 ... 그것은 1,6,14,18,20 ... 당신의 자기를 확인하십시오 – Baba

답변

2

키 ($ list4를)에만 list4의 현재 인덱스를 반환합니다. 귀하의 경우에는 18이 반환됩니다.

시도해보십시오. 저에게 도움이되었습니다. key ($ list4)를 반환하는 대신 일치하는 인덱스 배열을 반환했습니다.

function searchFourTerms($la, $gof) { 
$i3=0; 
if(count($la)<4){ 
    return -1; 
} 
$list4 = array(); 
for($i4 = 0; $i4 < count($gof); $i4++) { 
    $intercept4 = array_intersect($gof[$i4], $la); 
    $len4 = count($intercept4); 
    if(count($intercept4)==4) { 
     $list4[$i3] = $i4; 
     $i3++; 
    } 
} 
if (empty($list4)){ 
    return - 1; 
} 
$list5= array(); 
$i7=0; 
for($i4=0; $i4<count($list4); $i4++){ 
    $i6=0; 
    for($i5=0; $i5<count($list4); $i5++){ 
     if($i4!=$i5){ 
      $i6+=count(array_intersect($gof[$i4], $gof[$i5])); 
     } 
    } 
    if($i6<count($gof[$i4])){ 
     $list5[$i7]=$list4[$i4]; 
     $i7++; 
    } 
} 
return $list5; 
} 

= $ leftArray 어레이 (0,1,3,2,7,6,8,9)는, 반환 된 배열에 위해서 var_dump 하 것은 제외가 [13]에 포함 보낸 다음 배열을 인쇄되면

모든 중복 [0] [18] :

array(2) { 
[0]=> 
int(0) 
[1]=> 
int(18) 
} 
+0

확인해 보겠습니다. – mozcelikors

+0

네, 작동하는 것 같습니다. 내가 너에게 간단한 수정을 요청하자. 그룹이 불필요한 경우, 인덱스를 제공해서는 안됩니다. 예 : $ leftArray = 0,1,3,2,7,6,8,9 3 개의 일치하는 경우가 있습니다.[13], [18] 및 [0]. 그러나 [13]의 요소는 [18]과 [0] 그룹에서 이미 다룹니다. 그래서 [13]은 필요하지 않습니다. 나는 당신이 이해하기를 바랍니다 :) – mozcelikors

+0

그래,하지만 내가 물어 보지 않는 것은, 내가 쓴 것을 읽어 보라 – mozcelikors

0

이것은 당신이 1 개 이상의 키

var_dump(searchFourTerms($leftArray, $GroupOfFour)); 

출력

(모든 그룹이 어떤 2를 선택하는 array_slice를 사용) 반환하는 데 필요한 모든 것입니다
array 
    0 => int 18 
    1 => int 1 
    2 => int 14 
    3 => int 6 
    4 => int 20 

귀하의 수정 기능

function searchFourTerms($leftArray, $GroupOfFour) { 
    $len4 = count($leftArray); 
    $len4_carry = count($leftArray); 
    $list4 = array(); 
    for($i4 = 0; $i4 < count($GroupOfFour); $i4 ++) { 
     $intercept4 = array_intersect($GroupOfFour[$i4], $leftArray); 
     $len4 = count($intercept4); 
     if (count($intercept4) % 4 == 0) { 
      $list4[$i4] = $len4; 
     } 
    } 
    arsort($list4); 
    if (empty($list4) || ($len4_carry < 4)) 
     return - 1; 
    return array_keys($list4); 
}