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

それでも、既存のバージョンを上書きするか、個々のバージョンを生成していますが、変更される値のセットは 1 つだけです (したがって、15 のバージョンを取得できますが、モデルの変更のみで、他のすべては同じままです)。

ヘルプ/考えや指針をいただければ幸いです!

4

2 に答える 2

0

つまり、それだけの数のアイテムを含む行が 1 つあるとします。

$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 に答える