2011-01-21 4 views
0

Я немного застрял на этом, поэтому я думал, что id передал его здесь.использовать остаток, чтобы выбрать вход

У меня есть таблица, которая может быть динамически построена в полях для оси y, оси x и для значения.

имя поля ввода значений пронумеровано слева направо, сверху вниз.

0,1 
2,3 
4,5 
6,7 

Допустит, в поле ввода 7 я ввод значения, и я хочу, чтобы получить X и Y названия осей.

, когда форма суммируется по массиву.

[heading_x] => Array 
    (
     [0] => red 
     [1] => black 
    ) 

[heading_y] => Array 
    (
     [0] => Small 
     [1] => Medium 
     [2] => Large 
     [3] => X-Large 
    ) 

[value] => Array 
    (
     [1] => Array 
      (
       [0] => 
       [1] => 
      ) 

     [2] => Array 
      (
       [0] => 
       [1] => 
      ) 

     [3] => Array 
      (
       [0] => 
       [1] => 
      ) 

     [4] => Array 
      (
       [0] => 
       [1] => foo 
      ) 

код я уже писал до сих пор для нахождения оси х и у из выглядит следующим образом

if(preg_match("#^([0-9]+)\-value([0-9]+)\-([0-9]?)$#is", $key, $match)) { 
       foreach($attrDetails as $key_2 => $array) { 
        if($array['attribute_id'] == $match[1] && $val != '0' && $val != '') { 
         $options = unserialize(stripslashes($attrDetails[$key_2]['attribute_options'])); 
         unset($options['value'][0]); 
         print_r($options); 
         $max = count($options['heading_x']); 
         $base = $match[2] + 1; 
         $position_x = ($base % $max) + 1; 
         $position_y = ((floor($base/$max) - 1) < 0 ? 0 : floor($base/$max) - 1); 
         if($match[3] == '' || $base == '0') { 
          if($pd_details->pd_activate_special_offer == '1' && $pd_details->pd_offer_price != '0.00') { 
           if($array['attribute_type'] == '4') { 
            $cost = $val * $pd_details->pd_offer_price; 
           } 
          }else{ 
           if($array['attribute_type'] == '4') { 
            $cost = sprintf("%01.2f", $val * $pd_details->pd_price); 
           } 
          } 
         } 
         die($position_x . '/' . $position_y); 
         echo $options['heading_y'][$position_y-1] . '/' . $options['heading_x'][$position_x-1] . " amount: $val cost: $cost <br />\n"; 
         $_SESSION['basket']['items']['top_option'][] = $options['heading_x'][$position_x-1]; 
         $_SESSION['basket']['items']['side_option'][] = $options['heading_y'][$position_y-1]; 
         $_SESSION['basket']['items']['amount'][] = $val; 
         $_SESSION['basket']['items']['price'][] = $cost; 
        } 
       } 
      } 

основной бит является

$max = count($options['heading_x']); 
$base = $match[2] + 1; 
$position_x = ($base % $max) + 1; 
$position_y = ((floor($base/$max) - 1) < 0 ? 0 : floor($base/$max) - 1); 

posiition у, кажется, хорошо , Моя проблема в том позволяет сказать

этаж ($ база/$ макс) - 1

= 3,50.

Я знаю, что 3 является третьим вниз (или ключом 3 забыл), как я могу использовать остаток, чтобы найти ось x?

ответ

1

фигу ...

$max = count($options['heading_x']); 
$position_x=0; 
$position_y=0; 
for($z=0; $z<$match[2]+1; $z++){ 
    if($position_x % $max == 0) { $position_y++; $position_x=0; } 
    $position_x++;        
} 
+0

, так как вы ответили на свой вопрос, пожалуйста, отметьте ответ, как «принято», так что он не отображается в списке unanaswered вопросов. Спасибо. Это также поможет любому, кто найдет эту страницу в будущем, искать ответ на тот же вопрос. – Spudley