0

这让我发疯了。

我正在尝试读取 CSV 文件(完成),然后处理每一行的排列。每行包含几位数据(名称、价格等)。其中一些包含斜杠分隔列表 (a/b/c/c3/c65)。

我需要做的是生成每一行的所有可能变化。

例子:

Row 12 = 
    Name = name, 
    Price = price, 
    Models = x12/x14/x56,
    Codes = LP1/LP12/LP899/XP90/XP92,        

从中我应该能够生成 15 个变体,每个变体具有相同的名称和价格,但具有不同的代码和不同的模型;
名称 价格 X12 LP1
名称 价格 X12 LP12
名称 价格 X12 LP899
~
名称 价格 X56 XP90
名称 价格 X56 XP92

然而,我要么覆盖预先存在的版本,要么生成单独的版本,但只有一组值发生变化(所以我可能会得到 15 个版本,但只有模型发生变化,其他一切都保持不变)。

任何帮助/想法或指示将不胜感激!

4

2 回答 2

0

假设您有如下所示的数组:

$variant=Array();

$list[0]=array('Name'=>'Item name', 'Price'=>'$400','Models'=>'x12/x14/x56','Codes'=>'LP1/LP12/LP899/XP90/XP92');
$list[1]=array('Name'=>'Item name', 'Price'=>'$400','Models'=>'x12/x14/x56','Codes'=>'LP1/LP12/LP899/XP90/XP92'); // and more array.......
for($i=0;$i<count($list);$i++){
    $Names=$list[$i]["Name"];
    $Prices=$list[$i]["Price"];
    $Models=explode("/",$list[$i]["Models"]);
    $Codes=explode("/",$list[$i]["Codes"]);
    for($i2=0;$i2<count($Codes);$i2++){
        $variant[]=Array("name"=>$Names,"price"=>$Prices,"model"=>$Models[0],"code"=>$Codes[$i2]);
        $variant[]=Array("name"=>$Names,"price"=>$Prices,"model"=>$Models[1],"code"=>$Codes[$i2]);
        $variant[]=Array("name"=>$Names,"price"=>$Prices,"model"=>$Models[2],"code"=>$Codes[$i2]);

        // You can add more models by copy paste it and change $Models[2] with next available $Models array index
    }
}
var_dump($variant);
?>

结果会产生 30 个数组,因为我们有 2 行,所以没有错……好吧

循环代码的原因

因为codes大于models。因此,我们可以捕获所有值。祝你好运,顺便说一句,我已经测试过了,这很有效

于 2013-10-17T14:25:45.257 回答
0

所以你有一排包含那么多项目,比如说

$row =    array('Name'=>'name', 'price'=>'price','models'=>'x12/x14/x56','codes'=>'LP1/LP12/LP899/XP90/XP92')

并且您想用“/”拆分模型和代码,然后将每个项目作为数组中的一个新行,所有列的价格和名称字段具有相同的值,这是您可以这样做的方法,

$line = 0;
$result_array = array();
$result_array[$line]['name'] = $row['name'];
$result_array[$line]['price'] = $row['price'];

//split the models using explode
$tmpModels = explode("/",$row['models']);
foreach($tmpModels as $mod){
  if($line > 0){
    $result_array[$line]['name'] = $row['name'];
    $result_array[$line]['price'] = $row['price'];
  }
  $result_array[$line]['model'] = $mod;
  $line++;
}

$line = 0;
//now split the codes using explode
$tmpCodes = explode("/",$row['models']);
foreach($tmpCodes as $cod){
  $result_array[$line]['code'] = $cod;
  $line++;
}

if(count($tmpCodes) > count($tmpModels)){ // then few more rows should be added to include all from codes
   foreach($tmpCodes as $cod){
    $result_array[$line]['name'] = $row['name'];
    $result_array[$line]['price'] = $row['price]'
    $result_array[$line]['model'] = '';
    $result_array[$line]['code'] = $cod;
    $line++;
  }
}

$result_array will have what you want.

此代码未经测试,因此可能存在一些错误,顺便说一句,我希望这肯定会让您对如何实现这一目标有所了解。

于 2013-10-17T13:48:51.157 回答