在foreach中复制if结果

时间:2017-08-31 11:59:49

标签: php

简而言之,我从category_id,product_id和active activity标签下载。这个想法是,像分配给特定category_id的所有产品的值都是0,我显示回显“空”,否则“产品包含”,但foreach循环通过产品ID并显示空+ category_id一次,通过通过$ status和显示如此多的回显,有多少记录是活跃的。

查询没问题 - 我知道我不应该对数组执行逻辑操作,但是数据库是结构化的,所以我没有输出。

$result = array();

            foreach ($products as $detail) {

                $cid = $detail['category_id'];
                $pid = $detail['product_id'];
                $status = $detail['active'];
                $result[$cid][$pid] = $status;

                $multiplier = $result[$cid][$pid];
                $counter = count($result[$cid]);
                $multiplier2 = 1;


                $multiplier = $multiplier * $multiplier2;
                echo '$status: ' .$multiplier. " | ";

                if ($multiplier == 0) {
                    echo '$cid: '.$cid.' | empty <br />';
                } else {
                    echo '$cid: '.$cid.' | products contains <br />';
                }

            }

重复原因,但我不知道如何更改此代码中的代码

Array
(
    [0] => Array
        (
            [product_id] => 1
            [0] => 1
            [category_id] => 221
            [1] => 221
            [active] => 0
            [2] => 0
        )

    [1] => Array
        (
            [product_id] => 2
            [0] => 2
            [category_id] => 221
            [1] => 221
            [active] => 0
            [2] => 0
        )
)

$ result array

Array
(
    [221] => Array
        (
            [1] => 0
            [2] => 0
        )
)

@EDIT

目前,该函数返回类似

的内容

enter image description here

基于这个数组,它应该是这样的 - 你可以看到1437有=&gt; 1所以类别不是空的

enter image description here

1 个答案:

答案 0 :(得分:0)

听起来你正试图从分散的列表中隔离出什么是空的(它听起来像是你可以做更好的查询)。看看这个迭代是否有助于过滤。

function getCategoryActivity($products)
    {
        $store = array();
        foreach($products as $detail) {
            $cid = $detail['category_id'];
            $pid = $detail['product_id'];
            # If the cid is not already stored, store it
            if(!isset($store[$cid]))
                $store[$cid] = $detail['active'];
            else {
                # If it's already set to active, ignore it
                if(!empty($store[$cid]))
                    continue;
                else
                    # Store it if not currently active
                    $store[$cid] = $detail['active'];
            }
        }
        # Send back the filtered array
        return $store;
    }
# Fetch the filtered array
$sorted = getCategoryActivity($products);

$sorted现在应该为您提供一个类别列表,其中包含活动而不包含活动。您可以使用array_map()或其他foreach()echo再次迭代您想要的内容。我不知道你试图用这个乘数部分做什么,所以我忽略了它。