foreach循环多维数组但只循环遍历具有特定键

时间:2017-09-11 08:13:30

标签: php multidimensional-array foreach

我正在创建以下数组,其中包含所有产品及其所有类别:

$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是一个整数,category是一个字符串)

然后我想检查产品的某个类别是否与其他变量匹配,如果是这样则返回true:

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;

但我收到了错误

  

为foreach()提供的参数无效

是否只能通过具有特定键的数组元素循环?

编辑: 该数组看起来像这样

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

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

3 个答案:

答案 0 :(得分:0)

您应该使用is_array函数检查传递给foreach的内容是否为数组

如果您不确定它是否为数组,您可以随时使用以下PHP示例代码进行检查:



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

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




查看所有foreach语句,并查看as之前的内容,以确保它实际上是一个数组。使用var_dump转储它。

答案 1 :(得分:0)

试试这个:

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;
        }
    }
}

答案 2 :(得分:0)

我找到了一种方法来做到这一点

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