PHP学习心得


笛卡尔积

<ul> <li>在数学中,两个集合X和Y的笛卡尔积(Cartesian product),又称直积,表示为X*Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员。</li> <li>假设集合A={a,b},集合B={0,1,2},则两个集合的笛卡尔积为{(a,0),(a,1),(a,2),(b,0),(b,1),(b,2)}</li> <li>商品规格使用此算法</li> </ul> <h2>实现</h2> <pre><code class="language-php">function decare(array $arr) { if (empty($arr)) { return $arr; } $result = [[]]; foreach ($arr as $index =&gt; $info) { $append = []; foreach ($result as $product) { foreach ($info as $item) { $product[$index] = $item; $append[] = $product; } } $result = $append; } return $result; }</code></pre> <h2>测试</h2> <pre><code class="language-php">$data = [ 'Color' =&gt; ['Red', 'Green'], 'Size' =&gt; [39, 40, 41], 'Local' =&gt; ['BeiJing', 'ShangHai'], ]; $decare = decare($data); var_export($decare);</code></pre> <h2>结果</h2> <pre><code class="language-php">array ( 0 =&gt; array ( 'Color' =&gt; 'Red', 'Size' =&gt; 39, 'Local' =&gt; 'BeiJing', ), 1 =&gt; array ( 'Color' =&gt; 'Red', 'Size' =&gt; 39, 'Local' =&gt; 'ShangHai', ), 2 =&gt; array ( 'Color' =&gt; 'Red', 'Size' =&gt; 40, 'Local' =&gt; 'BeiJing', ), 3 =&gt; array ( 'Color' =&gt; 'Red', 'Size' =&gt; 40, 'Local' =&gt; 'ShangHai', ), 4 =&gt; array ( 'Color' =&gt; 'Red', 'Size' =&gt; 41, 'Local' =&gt; 'BeiJing', ), 5 =&gt; array ( 'Color' =&gt; 'Red', 'Size' =&gt; 41, 'Local' =&gt; 'ShangHai', ), 6 =&gt; array ( 'Color' =&gt; 'Green', 'Size' =&gt; 39, 'Local' =&gt; 'BeiJing', ), 7 =&gt; array ( 'Color' =&gt; 'Green', 'Size' =&gt; 39, 'Local' =&gt; 'ShangHai', ), 8 =&gt; array ( 'Color' =&gt; 'Green', 'Size' =&gt; 40, 'Local' =&gt; 'BeiJing', ), 9 =&gt; array ( 'Color' =&gt; 'Green', 'Size' =&gt; 40, 'Local' =&gt; 'ShangHai', ), 10 =&gt; array ( 'Color' =&gt; 'Green', 'Size' =&gt; 41, 'Local' =&gt; 'BeiJing', ), 11 =&gt; array ( 'Color' =&gt; 'Green', 'Size' =&gt; 41, 'Local' =&gt; 'ShangHai', ), )</code></pre>

页面列表

ITEM_HTML