使用PHP“乘以”数组值

时间:2014-07-25 06:55:58

标签: php arrays

由于我是一名PHP新手,所以提前道歉,我确定我没有在这里使用正确的术语。

我使用一组提供的SKU制作自动化产品数据Feed,但Feed需要单独输入产品的大小和性别差异。

有一种简单的方法可以解决这个问题:

$SKUs = array('Product1', 'Product2', 'Product3')

并将数组中的每个条目“乘以”:

$gender = array('M', 'F');
$size = array('S', 'M', 'L', 'XL');

所以我最终得到了这个结果:

$feed = array('Product1M-S', 'Product1M-M', 'Product1M-L', 'Product1M-XL', 'Product1F-S'...)

2 个答案:

答案 0 :(得分:7)

$feed = array();
foreach ($SKUs as $sku) {
    foreach ($gender as $g) {
        foreach ($size as $s) {
            $feed[] = $sku.$g.'-'.$s;
        }

    }
}
print_r($feed);

也许存在一个简单的数组函数,但是这个函数很容易阅读,并为将来做好准备" easy"变化。

PS。这是一个很好的讲座,有类似的问题:http://dannyherran.com/2011/06/finding-unique-array-combinations-with-php-permutations/

PS2。正如 KA_lin 建议的那样,您可以执行此功能,但是,我还没有了解阵列和产品结构,也不知道尺寸是否总是如此每种产品的相同(S,L,X)。如果数组始终相同,则可以在函数体内对其进行硬编码,如 KA_lin 所示。我只展示了线性解决方案,但您也可以轻松升级它的需求。

答案 1 :(得分:2)

您只需要一次遍历所有3个数组并附加到这样的新数组:

$SKUs = array('Product1', 'Product2', 'Product3')

function generate_product_combinations($SKUs)
{
    $size = array('S', 'M', 'L', 'XL');//these 2 arrays are universal
    $gender = array('M', 'F');         //and can belong here rather than params
    $final = array();                  //but should be taken from a config
    foreach($SKUs as $sku)
    {
        foreach($size as $size_shirt)
        {
            foreach($gender as $sex)
            {
                $final[]=$sku.$gender.'-'.$sex;
            }

        }
    }
    return $final;
}
$products = generate_product_combinations($SKUs);