2012-10-17 57 views
6

thể trùng lặp:
Checking if an array contains all elements of another arrayKiểm tra nếu một mảng chứa một mảng với PHP

Tôi đã đăng tải một cái gì đó như thế này để các Stackoverflow trước đó, nhưng câu trả lời không đáp ứng đầy đủ cho tôi. Đó là lý do tại sao tôi đăng câu hỏi một lần nữa, nhưng thay đổi tất cả các câu hỏi cùng.

Một số người đã giúp tôi xây dựng chức năng kiểm tra xem một số array($GroupOfEight[$i]) là một phần tử của một số nhiều chiều array($GroupOfEight) bằng một mảng khác ($ stackArray), không tính đến thứ tự số trong mảng.

Tuy nhiên, những gì tôi cần phải kiểm tra là liệu đề cập array($stackArray) chứa bất kỳ một array($GroupOfEight[$i]) trong đa chiều array($GroupOfEight) hay không, đó có nghĩa là chính array($stackArray) có thể bao gồm nhiều yếu tố hơn subarrays($GroupOfEight[$i]).

Đây là một mã làm việc mà tôi đã thu thập được cho đến nay, nhưng cần phải được sửa đổi để các phiên bản tôi muốn:

<?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); 
?> 

Bất kỳ ý tưởng hoặc giải pháp hợp lý sẽ vui lòng được nhiều đánh giá cao. Cảm ơn.

+0

kết quả mong đợi của bạn là gì ??? – Baba

+0

Đối với $ stackArray giả định, nó sẽ cho 4, là chỉ mục của số chỉ mục con chứa trong $ GroupOfEight – mozcelikors

+0

4 là 'mảng (1,3,5,7,13,15,9,11)' và ' $ stackArray = mảng (0,4,12,1,9,8,5,13,9,2,5,2,10); '.. bạn không thấy 3 bị thiếu trong danh sách ??? – Baba

Trả lời

3

Bạn có thể thử

$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); 

Output

5 
+0

Baba, tôi đã thực hiện các chức năng sửa đổi và tôi đã chuyển sang 4 nhóm loại bỏ. Vui lòng sửa đổi mã này và cho biết tôi đã sai ở đâu. ($ GroupOfFour có 16mem) tìm kiếm chức năngFourTerms ($ leftArray, $ GroupOfFour) { $ len4 = count ($ leftArray); $ list4 = array(); cho ($ i4 = 0; $ i4 <đếm ($ GroupOfFour); $ i4 ++) { $ intercept4 = array_intersect ($ GroupOfFour [$ i4], $ leftArray); $ len4 = count ($ intercept4); nếu (đếm ($ intercept4)% 4 == 0) { $ list4 [$ i4] = $ len4; } } arsort ($ list4); nếu (trống ($ list4)) trả lại - 1; phím trả về ($ list4); } – mozcelikors

+0

Tôi nghĩ rằng tôi đã giải quyết nó, nhưng vẫn có một số vấn đề. Vui lòng di chuyển mục này để trò chuyện khi bạn ở đây. – mozcelikors

7

Cái này là nhanh:

function contains_array($array){ 
    foreach($array as $value){ 
     if(is_array($value)) { 
      return true; 
     } 
    } 
    return false; 
} 
+1

luôn sử dụng dấu ngoặc {}, ngay cả đối với oneliners như của bạn 'return true;'. Đó là thói quen tốt trả tiền bất cứ khi nào bạn chuyển sang ngôn ngữ bằng cách sử dụng tiền xử lý và macro ... –

+0

Bạn có thể sử dụng vòng lặp FOR và trả lại bộ đếm nếu bạn cần vị trí của mảng. Hoặc, thay vì trả về true, trả về mảng mảng $ array. –

+0

Tôi không nghĩ rằng điều này làm chính xác những gì tôi yêu cầu, nhờ mặc dù – mozcelikors

Các vấn đề liên quan