私はこのことを単独でも犯すことができましたが、私の心はBrexitの後で不思議に思っていました。php array into combination
cId cName vId vName
1 Processor 679 3.5GHz 6-Core
1 Processor 680 3.0GHz 8-Core
1 Processor 681 2.7GHz 12-Core
2 Memory 682 16GB
2 Memory 683 32GB
2 Memory 684 64GB
5 HDD 685 256GB
5 HDD 686 512GB
5 HDD 687 1TB
11 Graphics 688 D500 with 3GB
11 Graphics 689 D700 with 6GB
と私はオプションのすべての組み合わせを一覧表示するための最も効果的な方法を探しています、
3.5GHz 6-Core, 16GB, 256GB, D500 with 3GB
で始まり、
で終わる:私は、ハードウェアオプションのこの配列(またはSQLの結果を)持っています2.7GHz 12-Core, 64GB, 1TB, D700 with 6GB
これは、私が考えると54行です。 PHPはすぐに使えますか?
またはMySQLで。入力データは、実際には2つのテーブルにあります.1つのテーブルにはカテゴリIDと名前があり、別のテーブルにはカテゴリID、値ID、および値の名前があります(もちろん、別のコンピュータのモデルIDもありますが、このMac Proは現在使用しています)。
編集: - などのMacBook専用メモリとHDDの選択肢を持つことができ、ハードウェアカテゴリの数が柔軟あるますのでご注意ください。カテゴリの数に制限はありません。
これは入力はるかに一般化である:
両方のカテゴリ、またはカテゴリ内の値の数は、柔軟であるc1 = array (v1, v2)
c2 = array (v3, v4, v5)
。これは、結果である値の6つの組み合わせ:
c1 v1, c2 v3, c5 v6
c1 v1, c2 v3, c5 v7
c1 v1, c2 v4, c5 v6
c1 v1, c2 v4, c5 v7
c1 v1, c2 v5, c5 v6
c1 v1, c2 v5, c5 v7
c1 v2, c2 v3, c5 v6
c1 v2, c2 v3, c5 v7
c1 v2, c2 v4, c5 v6
c1 v2, c2 v4, c5 v7
c1 v2, c2 v5, c5 v6
c1 v2, c2 v5, c5 v7
SQLデータ
:私は1つの以上のカテゴリc5 = array (v6, v7)
を追加すると
c1 v1, c2 v3
c1 v1, c2 v4
c1 v1, c2 v5
c1 v2, c2 v3
c1 v2, c2 v4
c1 v2, c2 v5
12個の組み合わせが存在します
は2つのテーブルにあります。最初のものは、ハードウェアのカテゴリが与えられたコンピュータモデルのために利用可能な説明:
modelID catID name
1 1 Processor
1 2 Memory
2 1 Processor
ので、ここでは、コンピュータモデル2は、一つだけのオプション有する - 異なるプロセッサ。
表2は、(optIDが一意である)が利用可能であるオプションについて説明します。
modelID catID optID name
1 1 1 i3
1 1 2 i5
1 2 3 4GB
1 2 4 8GB
1 2 5 16GB
2 1 6 i3
2 1 7 i5
2 1 8 i7
そこでここでは、6つの異なる組み合わせであるコンピュータを持っている、そして3と他のことができます。私が出力として必要とするのは、SKUのAPIとこれらの組み合わせの価格を照会するため、組み合わせのシーケンスです。クエリのようなものになります。
選択モデルmodelIDとデータをリセット(?例えばmodelID = 1)
は、例えば(CATIDとoptIDを選ぶのか?modelID = 1 & CATID = 1 & optID = 1プロセッサを選択されていますので、ここで一度、より多くのメモリを持つすべての利用可能なカテゴリ(用I3)
繰り返し2:4GB)
クエリSKUと価格(そうmodelID 1のための6回と3回modelID 2の
- 今では、i3の結果、4ギガバイト)このモデルのすべての組み合わせについて、1から
繰り返しになるだろうこれは上記の私のテーブルの要求の一覧です:
select?modelID=1
choose?modelID=1&catID=1&optID=1
choose?modelID=1&catID=2&optID=3
price?
select?modelID=1
choose?modelID=1&catID=1&optID=1
choose?modelID=1&catID=2&optID=4
price?
select?modelID=1
choose?modelID=1&catID=1&optID=1
choose?modelID=1&catID=2&optID=5
price?
select?modelID=1
choose?modelID=1&catID=1&optID=2
choose?modelID=1&catID=2&optID=3
price?
select?modelID=1
choose?modelID=1&catID=1&optID=2
choose?modelID=1&catID=2&optID=4
price?
select?modelID=1
choose?modelID=1&catID=1&optID=2
choose?modelID=1&catID=2&optID=5
price?
select?modelID=2
choose?modelID=2&catID=1&optID=6
price?
select?modelID=2
choose?modelID=2&catID=1&optID=7
price?
select?modelID=2
choose?modelID=2&catID=1&optID=8
price?
結果は、オプションで配列に格納されている9つのSKUになります。
result = array (
sku, price, modelID, array (catID => optID)
)
反復の回数が不確実であるため、再帰が最も一般的です。私はthis articleを見つけましたが、それは重複したものの大きな候補ですが、私はまだ解決策を得ていませんでした。私はおそらく、手動で組み合わせをしなければならないでしょう。
エピローグ
は、最終的には、上記のリンクは再帰について非常に有用だったが、それは私が望んでいたすべてのものをやっていませんでした。そしてその時点で、私はいつもすべての組み合わせを必要としないことに気付きました.APIはcatIDの位置を記憶しているので、必要なものだけを変更する必要があります。
select?modelID=1
choose?catID=1&optID=1
choose?catID=2&optID=3
price?
choose?catID=2&optID=4
price?
choose?catID=2&optID=5
price?
choose?catID=1&optID=2
choose?catID=2&optID=3
price?
choose?catID=2&optID=4
price?
choose?catID=2&optID=5
price?
select?modelID=2
choose?catID=1&optID=6
price?
choose?catID=1&optID=7
price?
choose?catID=1&optID=8
price?
をそして、これはコードです::そしてそれはまた、APIに以下の呼び出し(33対22)を意味
<?php
function possibilities($input) {
$current = array_shift($input);
foreach ($current['optID'] as $optid) {
echo "choose?catID=", $current['catID'], "&optID=", $optid, PHP_EOL;
if (empty($input)) {
echo "price?", PHP_EOL, PHP_EOL;
} else {
possibilities($input);
}
}
}
$models[] = array(
'modelID' => 1,
'options' => array(
array('catID' => 1, 'optID' => array(1, 2)),
array('catID' => 2, 'optID' => array(3, 4, 5))
)
);
$models[] = array(
'modelID' => 2,
'options' => array(
array('catID' => 1, 'optID' => array(6, 7, 8))
)
);
foreach ($models as $model) {
echo "select?modelID=", $model['modelID'], PHP_EOL, PHP_EOL;
possibilities($model['options']);
}
?>
は、だから私は、テーブル内のすべての価格を取得することができました。テーブル行のすべてのオプションについてもう一度解析する必要がありました。私は1つのステップでそれを行う方法だけでなく、組み合わせをソートしてAPIコールの合計を最小限にする方法を知っている人がいると確信しています。
4つのforeach - それになります – splash58
あなたが試したことを共有することはできますか? [StackOverflowで質問する方法](http://stackoverflow.com/help/how-to-ask) –
私の答えはあなたの問題を解決しますか? – JRsz