PHP - 这段代码到底在做什么?

时间:2011-02-21 14:41:14

标签: php

我无法弄清楚如何在Stackoverflow上登录我的帐户,我发现它有点令人困惑。无论如何,我在这里问了一个关于我遇到的问题的问题:

Other Question

我已经发现了一个开源项目,它完全按照我的需要完成,但是代码是PHP,虽然我可以理解其中的大部分内容都是我无法获得的。我会在这里发布我的评论,如果有人可以添加额外的细节,那将是值得赞赏的。

    public function productAttributeExists($attributesList, $currentProductAttribute = false)
{
    $result = Db::getInstance()->ExecuteS('SELECT pac.`id_attribute`, pac.`id_product_attribute`
    FROM `'._DB_PREFIX_.'product_attribute` pa
    LEFT JOIN `'._DB_PREFIX_.'product_attribute_combination` pac ON (pac.`id_product_attribute` = pa.`id_product_attribute`)
    WHERE pa.`id_product` = '.intval($this->id));

    if (!$result OR empty($result))
        return false;

    $productAttributes = array();
    foreach ($result AS $productAttribute)
        $productAttributes[$productAttribute['id_product_attribute']][] = $productAttribute['id_attribute'];

    foreach ($productAttributes AS $key => $productAttribute)
        if (sizeof($productAttribute) == sizeof($attributesList))
        {
            $diff = false;
            for ($i = 0; $diff == false AND isset($productAttribute[$i]); $i++)
                if (!in_array($productAttribute[$i], $attributesList) OR $key == $currentProductAttribute)
                    $diff = true;
            if (!$diff)
                return true;
        }
    return false;
}

好的事实证明我无法在Stackoverflow中评论此代码而不会将其全部归结为地狱格式。所以我的理解是:

1)获取数据 2)如果数据集为空,则返回false 3)名为productAttributes的新数组 4)循环数据集并填充数组 5)不确定最后一部分是做什么的,从'foreach'开始的部分对我来说还不清楚。

任何提示赞赏。顺便说一句,C#是我的首选语言,也是我最了解的语言。

1 个答案:

答案 0 :(得分:0)

该函数名称只能检查产品的特定属性列表是否存在,并且与第一个参数中提供的属性列表相同。

最后一部分令人困惑,但它正在遍历所有属性,以查看是否有任何检索到的属性与提供的属性相同。

在循环迭代中:

  • 它首先尝试查看提供的属性列表是否与来自数据库的属性列表的长度相同 - 如果不是,它只是转到for循环中的下一个属性列表
  • 如果列表的长度相同,那么它将遍历属性列表中的每个属性,并查看任何元素之间是否存在不同的内容。

功能不是很理想,顺便说一句。