这让我发疯了。
我正在尝试读取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
然而,我要么覆盖预先存在的版本,要么生成单个版本,但只更改了 1 组值(所以我可能会得到 15 个版本,但只有模型更改,其他一切都保持不变)。
任何帮助/想法或指示将不胜感激!
所以你有一行包含这么多项目,说
$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.
此代码未经测试,因此可能会有一些错误,顺便说一句,我希望这肯定会让您了解如何实现这一点。
假设你有如下所示的数组:
$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
.因此,我们可以捕获所有值。祝你好运,顺便说一句,我已经测试过它,这很有效