2011-07-09 62 views
1

我有情況與數組交換條件。我的數組被繪製成波紋管。交換數組有條件的項目

  • PID =>像在MySQL主鍵,因此可能會失去它訂購
  • 類型=>類型指示,具有3類型的產品產品type.array。
  • 名稱=>僅表明產品名稱

首先我想在MySQL的解決方案,但我沒有得到他們任何好的sign.Some建議我陣列交換是更好的。但我不知道如何得到這個。

我的問題

我有items.When的名單我上市的產品,3型(母校)不應以5,10,15 (即5個模塊)positions.If它我的設計崩潰。

屏幕截圖說明

  1. Perfect placement
  2. Collapsed design

所以我想確保3型(主)還沒有出現在5 position.How的MOD我可以做到這一點 幫我

我以前在mysql上試過here

Array 
    (
     [0] => Array 
      (
       [pid] => 1 
       [type] => 1 
       [name] => A 
      ) 

    [1] => Array 
     (
      [pid] => 2 
      [type] => 1 
      [name] => B 
     ) 

    [2] => Array 
     (
      [pid] => 3 
      [type] => 2 
      [name] => D 
     ) 

    [3] => Array 
     (
      [pid] => 4 
      [type] => 3 
      [name] => E(master) 
     ) 

    [4] => Array 
     (
      [pid] => 5 
      [type] => 3 
      [name] => f(sub) 
     ) 

    [5] => Array 
     (
      [pid] => 6 
      [type] => 1 
      [name] => A1 
     ) 

    [6] => Array 
     (
      [pid] => 7 
      [type] => 2 
      [name] => B1 
     ) 

    [7] => Array 
     (
      [pid] => 8 
      [type] => 1 
      [name] => C1 
     ) 

    [8] => Array 
     (
      [pid] => 9 
      [type] => 2 
      [name] => D1 
     ) 

    [9] => Array 
     (
      [pid] => 10 
      [type] => 3 
      [name] => E1(master) 
     ) 

    [10] => Array 
     (
      [pid] => 11 
      [type] => 3 
      [name] => A2(sub) 
     ) 

    [11] => Array 
     (
      [pid] => 12 
      [type] => 2 
      [name] => B2 
     ) 

    [12] => Array 
     (
      [pid] => 13 
      [type] => 1 
      [name] => C2 
     ) 

    [13] => Array 
     (
      [pid] => 14 
      [type] => 2 
      [name] => D2 
     ) 

    [14] => Array 
     (
      [pid] => 15 
      [type] => 1 
      [name] => E2 
     ) 

在此先感謝

+0

如果你交換的位置也崩潰你的設計,因爲1主人佔據兩個。 – Jagadeesan

+0

@jagadeesan:我希望我能理解你寫的是什麼 –

回答

1

我給它一個嘗試,下面的代碼應該做的伎倆。我推薦的是你在定義塊的幾個子部分中分割一個塊。此外,它不是非常乾燥的代碼,但它會給你一個想法:

<?php 

$grid = array(); $blocks = array(); 

$blocks[] = array(array("pid" => 1, "type" => 1, "name" => "A")); 
$blocks[] = array(array("pid" => 2, "type" => 1, "name" => "B")); 
$blocks[] = array(array("pid" => 3, "type" => 2, "name" => "D")); 
$blocks[] = array(array("pid" => 4, "type" => 3, "name" => "E(master)"), array("pid" => 5, "type" => 3, "name" => "F (sub)")); 
$blocks[] = array(array("pid" => 6, "type" => 1, "name" => "A1")); 
$blocks[] = array(array("pid" => 7, "type" => 2, "name" => "B1")); 
$blocks[] = array(array("pid" => 8, "type" => 1, "name" => "C1")); 
$blocks[] = array(array("pid" => 9, "type" => 2, "name" => "D1")); 
$blocks[] = array(array("pid" => 10, "type" => 3, "name" => "E1 (master)"), array("pid" => 11, "type" => 3, "name" => "A2 (sub)")); 
$blocks[] = array(array("pid" => 12, "type" => 2, "name" => "B2")); 
$blocks[] = array(array("pid" => 13, "type" => 1, "name" => "C2")); 
$blocks[] = array(array("pid" => 14, "type" => 2, "name" => "D2")); 
$blocks[] = array(array("pid" => 14, "type" => 1, "name" => "E2")); 

$current_row = 0; 

for ($n=0;$n < count($blocks);$n++) { 

    //Check if current row exists in grid 
    if (!isset($grid[$current_row])) 
    { 
     //Create new empty row in grid 
     $grid[$current_row] = array(); 
    } 

    //check if current block fits 
    if (count($grid[$current_row]) + count($blocks[$n]) > 5) 
    { 
     // Block doesn't fit: Search for block that fits 
     for ($i=$n;$i < count($blocks);$i++) 
     { 
      if (count($grid[$current_row]) + count($blocks[$i]) <= 5) 
      { 
       //place parts in block on current row 
       foreach ($blocks[$i] as $part) 
       { 
        $grid[$current_row][] = $part; 
       } 

       //unset block from queue 
       unset($blocks[$i]); 
      } 
     } 

     //place current block on new row 
     $current_row++; 
    } 

    //place parts in block in grid 
    foreach ($blocks[$n] as $part) 
    { 
     $grid[$current_row][] = $part; 
    } 
} 

print_r($grid); 
?>