2016-08-29 4 views
0

Ich arbeite am Hinzufügen Produktmodul.Array von Benutzer zu Array von Datenbank vergleichen PHP

Der Benutzer kann eine CSV-Datei hochladen, um Produkte hinzuzufügen. Wie kann ich ein System erstellen, das, wenn ein Produkt in db vorhanden ist, das Produkt überspringt und dann erneut nach einem anderen Produkt sucht. Wenn in der db kein solches Produkt vorhanden ist, wird das Produkt zur db hinzugefügt.

also lasst uns sagen

//Products in db 
//Code  //Description 
1   Item 1 
2   Item 2 
3   Item 3 

//Products in user input 
//Code  //Description 
1   Item 1 
3   Item 3 
4   Item 4 
5   Item 5 

Aus obigen Beispiel, wie kann ich schaffen ein System, das nur Punkt 4 und Punkt 5 in den db hinzufügen wird?

Hier ist mein $ db_products Array, das Produkte von db

foreach($db_products as $prod){ 
    $products[] = array(
    "code" => $prod['code'], 
    "description" => $prod['description'] 
); 
} 

Hier ist mein $ products_array die Eingangs Benutzer

foreach($products as $v){ 
    $products_array[] = array(
     "code"  => $v['code'], 
     "description" => $v['description'], 
    ); 
} 

ich diesen Code

foreach($products_array as $prod){ 
    foreach($db_products as $db_prod){ 
    $result = array_diff($db_prod, $prod); 
     var_dump($result); 
    } 
} 
zum Vergleich verwendet wird, enthält enthält

Aber warum gibt es mir die gleichen Daten zwischen den Arrays?

Was fehlt mir hier ?? danke

+0

http://php.net/manual/en/function.array- diff.php. nimm einfach den Unterschied. Bitte achten Sie darauf, dass Ihr csv-Array das erste Array in diesem Funktionsargument sein wird. Danke Beispiel: -https: //eval.in/630846 –

+0

Was, wenn einige Leute 1 Million Produkte zur gleichen Zeit addieren ... mit ungültigen Daten zusätzlich, dein Server wird detonieren. Denken Sie an die Kriterien, die ein Produkt identifizieren und wie Sie den Server gekühlt halten. – DanFromGermany

Antwort

0

Sie eine rekursive Funktion können Sie überprüfen, ob $prod von $products_array im mehrdimensionalen Array existiert $db_products, wie folgt aus:

$products_to_add = array(); 
foreach ($products_array as $prod) { 
    if (!inMultiArray($prod, $db_products)) { 
     $products_to_add[] = $prod; // Add the product that's -not- in the DB to $products_to_add 
    } 
} 

function inMultiArray($needle, $haystack, $strict = false) { 
    foreach ($haystack as $item) { 
     if (is_object($item)) { 
      $item = get_object_vars($item); 
     } 

     if (($strict ? $item === $needle : $item == $needle) || (is_array($item) && inMultiArray($needle, $item, $strict))) { 
      return true; 
     } 
    } 

    return false; 
}