从多维数组的计算中构建数组


build array out of computations from multidimensional array

这让我发疯了。

我正在尝试读取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.因此,我们可以捕获所有值。祝你好运,顺便说一句,我已经测试过它,这很有效