2016-08-11 3 views
1

Ich habe zwei Sätze von Ergebnissenfinden und fügen Sie in mehrdimensionales Array

enter image description here

ich die Werte in B die beiden und fügen Sie vergleichen wollen, die in ist ein (Hoffnung, die Sinn machen)

Aber ich möchte auf drei Kriterien (Obst, Farbe und Element) vergleichen

So sind die zwei gelben Linien auf T angehängt werden müssen B.

Die Lösung, an die ich denke, ist eine sich wiederholende for-Schleife in einer for-Schleife, aber dies könnte ein Problem sein, wenn Sie Tausende von zu vergleichenden Datensätzen erreichen.

Gibt es vielleicht einen einfacheren Weg. Die Sache, die mich stört, ist die Tatsache, dass Tabelle B eine zusätzliche Spalte hat.

Beispiel

For (x , records in table (A), x++) 
    $found = false; 
    For(i, records in table (B), i++) 
     if(tableA[x]['Fruit'] === tableB[i]['Fruit']) 
      if(tableA[x]['Colour'] === tableB[i]['Colour']) 
       if(tableA[x]['Element'] === tableB[i]['Element']) 
        $found = true; 
       End if 
      End if 
     End if 
    End for 
    if(!$found) 
     $f = tableA[x]['fruit']; 
     $c = tableA[x]['Colour']; 
     $e = tableA[x]['Element']; 
     tableB[]['Fruit'] = $f; 
     tableB[]['Colour'] = $c; 
     tableB[]['Element'] = $e; 
     tableB[]['Object'] = ""; 
    End if 
End for 
+0

Zeigen Sie Ihren * versuchten * Code, zuerst. –

+0

Okay, Moment, ich werde in ein paar Minuten etwas veröffentlichen. Ich habe immer noch geplant, aber werde ein paar Pseudo ablehnen. – morne

+0

Vielleicht hilft Ihnen diese Funktion: http://php.net/manual/en/function.array-udiff-assoc.php? –

Antwort

0

hier Nun ist eine kleine Funktion, die die Arbeit erledigt. aber es ist möglicherweise der lange Weg herum. Es funktioniert aber.

private function filterResult ($resultArray, $checkArray) { 

     // Loop trough the array with the eaxtra values 
     foreach($checkArray as $key => $value) { 
      $fruit = $value['FRUIT']; 
      $colr= $value['COLOUR']; 
      $elem = $value['ELEMENT']; 
      $cnt = 0; 

      //Loop through array with final result to check if checkvalue exists 
      foreach($resultArrayas $keyRA => $valueRA){ 
       $fruitChk = ($valueCI['FRUIT'] == $fruit) ? true : false ; 
       $colrChk = ($valueCI['COLOUR'] == $colr) ? true : false ; 
       $elemChk = ($valueCI['ELEMENT'] == $elem) ? true : false ; 

       //Check on all 3 criteria and if value exist, increment counter 
       if($fruitChk && $colrChk && $elemChk){ 
        $cnt += 1; 
       } 
      } 

      //If counter is = to zero. append checkArray element to ResultArray 
      if($cnt == 0){ 
       $newdata = array (
        'FRUIT' => $value['FRUIT'], 
        'COLOUR' => $value['COLOUR'], 
        'ELEMENT' => $value['ELEMENT'], 
        'OBJECT' => "", 
       ); 
       $resultArray[] = $newdata; 
      } 
     } 

     //return result array 
     return $resultArray; 
    }