2012-10-17 12 views
6

Mögliche Duplizieren:
Checking if an array contains all elements of another arrayÜberprüfen Sie, ob ein Array ein weiteres Array mit PHP enthält

Ich habe vor, so etwas zu dem Stackoverflow geschrieben, aber die Antworten nicht vollständig befriedigt mich. Deshalb schreibe ich die Frage erneut, aber ich ändere die Frage die ganze Zeit.

Einige Leute halfen mir, eine Funktion zu konstruieren, wenn ein array($GroupOfEight[$i]) prüft, die ein Element eines mehrdimensionalen array($GroupOfEight) ist gleich ein weiteres Array ($ stackArray), in den Arrays die Anzahl Bestellung zu vernachlässigen.

Was ich jedoch prüfen müssen, ob die erwähnte array($stackArray) jede andere array($GroupOfEight[$i]) im mehrdimensionalen array($GroupOfEight) enthält oder nicht, das heißt, Haupt array($stackArray) mehr Elemente als subarrays($GroupOfEight[$i]) bestehen.

Hier ist derjenige Code arbeiten, die ich bisher gesammelt habe, sondern müssen auf die Version geändert werden, ich will:

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

Jede logische Ideen oder Lösungen freundlich sehr geschätzt werden. Vielen Dank.

+0

Was ist Ihr erwartetes Ergebnis ??? – Baba

+0

Für das angenommene $ stackArray sollte es 4 geben, das ist der Index der enthaltenen Subarray-Indexnummer in $ GroupOfEight – mozcelikors

+0

4 ist 'Array (1,3,5,7,13,15, 9,11)' und ' $ stackArray = array (0,4,12,1,9,8,5,13,9,2,5,2,10); '.. kannst du nicht sehen, dass 3 in der Liste fehlt ??? – Baba

Antwort

3

können Sie versuchen,

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

Ausgabe

5 
+0

Baba, ich habe Modifikationsfunktionen gemacht und bin zu 4 Gruppen eliminiert worden. Bitte überarbeiten Sie diesen Code und sagen Sie mir, wo ich falsch liege. ($ GroupOfFour hat 16mem) Funktion searchFourTerms ($ leftArray, $ GroupOfFour) { $ len4 = Anzahl ($ leftArray); $ list4 = array(); für ($ i4 = 0; $ i4 mozcelikors

+0

Ich denke, ich habe es gelöst, aber immer noch einige Probleme. Bitte verschiebe dies zum Chat, wenn du hier bist. – mozcelikors

7

Dieser ist schnell:

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

immer Block Klammern {}, auch für oneliner wie Ihre 'return true;'. Es ist eine gute Angewohnheit, die sich auszahlt, wenn Sie mit Präprozessor und Makros in Sprachen springen ... –

+0

Sie können eine FOR-Schleife verwenden und den Zähler zurückgeben, wenn Sie die Position des Arrays benötigen. Oder geben Sie anstelle von true den Array-Schlüssel $ array zurück. –

+0

Ich glaube nicht, dass dieser genau das tut, wonach ich gefragt habe, danke, aber – mozcelikors

Verwandte Themen