2015-11-05 5 views
-1

Я действительно разочарован. Мне действительно нужно показать эту таблицу правильно. Как можно установить этот код, чтобы показать таблицу вертикально, как это:PHP Данные таблицы Показать результаты по вертикали не по горизонтали

1 - 4 - 7

2 - 5 - 8

3 - 6 - 9

И не так, как это:

1 - 2 - 3 - 4

5 - 6 - 7 - 8

9 - ... е ct

<?php 

$PNG_WEB_DIR = plugin_dir_path(__FILE__).'temp/'; 

wp_mkdir_p($PNG_WEB_DIR); 

$cols = $this->settings['cols']; 
$rows = $this->settings['rows']; 
$label_number = 0; 

// die($_GET['order_ids']); 
$order_ids = explode(',',$_GET['ids']); 
$order_count = count($order_ids); 
$labels_per_page = $cols*$rows; 
$page_count = ceil(($order_count)/$labels_per_page); 

for ($page=0; $page < $page_count; $page++) { 
    echo '<table class="address-labels" width="100%" height="100%" border="0" cellpadding="0">'; 
    $last_height = 0; 
    $current_height = $current_width = 0; 
    $current_row = 0; 

    for ($label=0; $label < $labels_per_page; $label++) { 
     $label_number++; 
     $current_col = (($label_number-1) % $cols)+1; 

     if ($current_col == 1) { 
      $last_height = $current_height; 
      $last_width = 0; 
      $current_row++; 
      echo '<tr class="label-row">'; 
     } 

     if ($label_number > $this->offset && isset($order_ids[$label_number - $this->offset - 1])) { 
      $order_id = $order_ids[$label_number - $this->offset - 1]; 
     } else { 
      $order_id = '';   
     } 

     $current_width = round($current_col * (100/$cols)); 
     $width = $current_width - $last_width; 
     $last_width = $current_width; 

     $current_height = round($current_row * (100/$rows)); 
     $height = $current_height - $last_height; 

     printf('<td width="%s%%" height="%s%%" class="label"><div class="label-wrapper">', $width, $height); 
     // because we are also looping through the empty labels, 
     // we need to check if there's an order for this label 
     if (!empty($order_id)) { 
      // get label data from order 
      $order = new WC_Order($order_id); 

      // replace placeholders 
      $label_data = isset($this->settings['address_data'])? nl2br($this->settings['address_data']): '[shipping_address]'; 
      $label_data = $this->make_replacements($label_data, $order); 

      echo '<div class="address-block">'; 
      echo '<div class="addrress_show">'; 

      // process label template to display content 
      echo $label_data; 
      echo '</div>'; 
      echo '<div class="clearb"></div>'; 
      echo '</div>'; 
     } else { 
      echo '&nbsp;'; 
     } 
     echo '</div></td>'; 

     if ($current_col == $cols) { 
      echo '</tr>'; 
     } 

    } 
    echo '</table>'; 
} 
     // shpt_after_page hook 
       do_action('shpt_after_page'); 
     ?> 
+1

Какова исходная структура данных? Массив массивов - т. Е. Многомерный массив? – RamRaider

+0

Это часть бесплатного плагина Wordpress https://wordpress.org/plugins/woocommerce-order-address-print/ Я надеюсь, что это поможет с вашим вопросом, я новичок в этом ... –

+1

нет, что на самом деле не помогает – RamRaider

ответ

0

Поскольку я не могу знать вашу сырую структуру данных, которая используется для петли через него и производить таблицу, я предположил, как одномерный массив, и вы хотите, чтобы распечатать таблицу 3 колонны, как вы сказали, чтобы увидеть в действии вот PHP Fiddle - хит работать, чтобы выполнить его - это будет работать для любой длины массива, пока столбцы 3, строки является динамическим

PHP:Обновлено для назначение именования

<?php 
    $table = '<table class="address-labels" width="30%" border="0" cellpadding="0">'; 
    $dataArr = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, 17); 
    $colNum = 3; 
    $rowNum = ceil(count($dataArr)/$colNum); 
    for($i=0; $i < $rowNum; $i++){ 
     $x1 = isset($dataArr[$i]) ? $dataArr[$i] : '-'; 
     $x2 = isset($dataArr[$i + $rowNum]) ? $dataArr[$i + $rowNum] : '-'; 
     $x3 = isset($dataArr[$i + 2 * $rowNum]) ? $dataArr[$i + 2 * $rowNum] : '-'; 
     $table .= '<tr><td>' . $x1 . '</td><td>' . $x2 . '</td><td>' . $x3 . '</td></tr>'; 
    } 
    $table .= '</table>'; 
    echo $table; 

?> 

EDIT: Теперь, если вы хотите изменить номер столбца, как установить его на 5, например, вам нужно сделать следующее:

первый - набор $colNum = 5; второй - добавить больше переменных для хранения значений, как, * считая это 5 колонок:

$x4 = isset($dataArr[$i + 3 * $rowNum]) ? $dataArr[$i + 3 * $rowNum] : '-'; 
$x5 = isset($dataArr[$i + 4 * $rowNum]) ? $dataArr[$i + 4 * $rowNum] : '-'; 

и не забудьте увеличить множитель * $rowNum

то для каждого дополнительного столбца, добавляемого вам нужно добавить <td></td> как:

'<td>' . $x4 . '</td><td>' . '</td><td>' . $x5 . '</td><td>' . '</td>' 

Вот еще PHP Fiddle показывает выше 5 столбцов.

0

Попробуйте это. Это в чистом PHP

<?php 

$cols = 3; 
$data = range(1,29); 


// classic 
$index = 1; 
foreach($data as $el) 
{ 
    echo $el.' '; if ($index % $cols ==0) echo '<br/>'; 
    $index++; 
} 

echo '<br/><br/>'; 

// special 
$rows = $cols ; 
$cols = floor(count($data)/$cols); 

for($row = 0 ; $row < $rows; $row++){ 

    for ($index = $row; $index < count($data); $index += $rows) 
    echo $data[$index].' '; 
    echo '<br/>'; 

} 
Смежные вопросы