如果唯一,如何在数组中存储值

时间:2014-05-27 15:27:15

标签: php mysql arrays

我正在撰写一份PHP报告,该报告旨在使用commma分隔符纯粹作为CSV文件导出。

有三列与product_id相关,这三列如下:

SKU                Parent / Child      Parent SKU
12345                  parent             12345
12345_1                child              12345
12345_2                child              12345
12345_3                child              12345
12345_4                child              12345
18099                  parent             18099
18099_1                child              18099

目前代码如下:

<?php

    $con_size = array (35,355,36,37,375,38,385,39,395,40,405,41,415,42,425,43,435,44,445,45,455,46,465,47,475,48,485);
    $arrlength=count($con_size);

    for($x=0;$x<$arrlength;$x++) {

    // check if size is available
    if($line['quantity_c_size_'.$con_size[$x].'_chain'] > 0 ) {

      ?>

        <? echo 'Shoes'; ?>,
        <?=$line['product_id']?>,
        ,
        ,

所以目前这只是将product_ID回显到SKU列。我如何创建一个数组来测试&#39; product_id&#39;是唯一的,如果没有后缀ID为_1,_2等

谢谢,

2 个答案:

答案 0 :(得分:3)

测试它是否在数组中,如果不是则添加它。

if (!in_array($line['product_id'], $SKU)) {
    $SKU[] = $line['product_id'];
    echo $line['product_id'];
} else {
    echo $line['product_id'] . "_1";
}

如果每次都需要增加后缀,可以执行以下操作:

$SKU_counters = array();
if (isset($SKU_counters[$line['product_id']])) {
    echo $line['product_id'] . "_" . $SKU_counters[$line['product_id']]++;
} else {
    echo $line['product_id'];
    $SKU_counters[$line['product_id']] = 1;
}

在循环结束时,您可以:

$SKU = array_keys($SKU_counters);

答案 1 :(得分:0)

可能将大部分工作放在数据库上(未经测试): -

<?php

$con_size = array (35,355,36,37,375,38,385,39,395,40,405,41,415,42,425,43,435,44,445,45,455,46,465,47,475,48,485);

$con_check = 'AND (quantity_c_size_'.implode('_chain > 0 OR quantity_c_size_',$con_size).'_chain > 0)';

$sql = "SELECT DISTINCT product_id, @cnt AS out_counter, @cnt:=IF(@prev_product_id=product_id, @cnt + 1, 0), @prev_product_id:=product_id
        FROM product 
        CROSS JOIN (SELECT @prev_product_id:=0, @cnt:=0) sub1
        WHERE on_amazon = 'on' 
        AND active = 'on'
        $con_check
        ORDER BY product_id";

$result = mysql_query($sql) or die ( mysql_error() );

while ($line = mysql_fetch_assoc($result) ) 
{
    if ($line['out_counter'] == 1)
    {
        $SKU[] = $line['product_id'];
    }
    else
    {
        echo $line['product_id'].'_'.$line['out_counter']." \r\n";
    }
}
?>

获取$ con size的列表并构建一个WHERE子句的负载,以检查每个值是否大于0.这应该可以节省您带回的值,而这些值并不关心。

SELECT然后以product_id顺序返回项目,但添加一个序列号(当product_id与前一行的那个不同时,它会重置为0。)

然后当循环结果时,如果序列为1(即该product_id的第一次出现),则保存product_id的值,否则它只输出产品id,序列号连接到末尾。