我正在撰写一份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等
谢谢,
答案 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,序列号连接到末尾。