2017-09-11 1 views
0

I folgende Array bin die Schaffung dass alle Produkte und alle Kategorien enthält:foreach Schleife mehrdimensionales Array, sondern nur eine Schleife durch Array-Elemente mit spezifischen Schlüssel

$result = $wpdb->get_results("SELECT product_nr, category FROM erp_product_categories",ARRAY_A); 
$product_categories = array(); 
    foreach($result as $row){ 
    $product_categories[$row["product_nr"]][] = $row["category"]; 
    } 

(product_nr eine ganze Zahl ist und die Kategorie ist ein String)

dann will ich überprüfen, ob eine der Kategorien eines Produkts mit einer anderen variablen übereinstimmt und true zurück, wenn das der Fall ist:

foreach($product_categories[$ean] as $product_categorie) { 
    $manages_post = in_array($product_categorie, $this->term_link_conditions); 

    if($manages_post == true){ 
     break; 
    } 
} 
return $manages_post; 

Aber ich Der Fehler bei einem bestimmten Schlüssel

Invalid argument für foreach geliefert()

ist es nicht möglich, eine Schleife nur durch Elemente eines Arrays bin immer?

Edit: Das Array wie folgt aussieht

Array 
(
    [10001] => Array  //product_nr 
    (
     [0] => 1   //category 
     [1] => 4   //category 
    ) 

    [10002] => Array 
    (
     [0] => 1 
     [1] => 20 
    ) 
    //... 
) 
+0

zu tun, was ist der Wert von '$ product_categories' und' $ ean'? –

+0

Das Array ist leer oder existiert nicht. – Akintunde007

+0

'$ product_categorie' ist eigentlich ein Array von Kategorien? Deine Benennung ist so verwirrend. Es enthält auch keine Sicherheitsnetze. Zum Beispiel, wenn ein Produkt keine Kategorie hat, erscheint es nicht im Array, obwohl ich erwarten würde, dass die Produkt-ID da wäre, aber der Inhalt ein leeres Array für die Kategorien ist. Und zu guter Letzt, haben Sie darüber nachgedacht, nur die Kategorien für das $ ean abzufragen, statt alle zu bekommen und sie dann in PHP-Code zu filtern? – GolezTrol

Antwort

0

Sie sollten überprüfen, dass das, was Sie zu foreach vorbei ist ein Array mit Hilfe der is_array Funktion

Wenn Sie nicht sicher sind, es geht zu sein ein Array können Sie immer überprüfen Sie die folgende PHP-Beispielcode verwenden:

if (is_array($product_categories[$ean])) { 
 

 
    foreach ($product_categories[$ean] as $product_categorie) { 
 
    //do something 
 
    } 
 
}

Überprüfen Sie alle Ihre Foreach-Anweisungen, und schauen Sie, ob die Sache vor der als, um sicherzustellen, dass es tatsächlich ein Array ist. Verwenden Sie var_dump, um es zu löschen.

0

Try this:

if(is_array($product_categories) && sizeof($product_categories) > 0) { 
    foreach($product_categories as $key => $product_categorie) { 
     if($manages_post = in_array($key, $this->term_link_conditions)){ 
      return $manages_post; 
     } 
    } 
} 
+0

Ich möchte den Schlüssel in in_array nicht überprüfen, ich möchte Werte mit einem bestimmten Schlüssel überprüfen (product_nr (= ean)) Wenn der Schlüssel beispielsweise 10002 ist, möchte ich, dass die folgenden Werte überprüft werden: [10002] => Array ( [0] => 1 [1] => 2 [2] => 8 // check Kategorien 1, 2 und 8 ) – Kvasha

0

ich einen Weg gefunden, diese

$product_category = $product_categories[$ean]; 

      if (is_array($product_category)) { 
       $matches = array_intersect($product_category, $this->term_link_conditions); 
       if(sizeof($matches) > 0){ 
        $manages_post = true; 
       } 
      } 
Verwandte Themen