2011-07-09 57 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); 
?>