2016-09-03 2 views
0

все мастера. У меня есть массив нижеДинамически отображать таблицу из многомерного массива

Array 
(
    [1] => Array 
     (
      [2] => Array 
       (
        [0] => 11 
        [1] => 12 
        [2] => 13 
       ) 

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

     ) 

    [2] => Array 
     (
      [2] => Array 
       (
        [0] => 11 
        [1] => 12 
        [2] => 13 
       ) 

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

     ) 

    [3] => Array 
     (
      [2] => Array 
       (
        [0] => 11 
        [1] => 12 
        [2] => 13 
       ) 

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

     ) 

) 

В массиве выше первый узел [1] мое значение цвета. Внутри [2] мой атрибут размера и это значение. в том же дочернем узле их [3] - мой атрибут типа и его значение. Я хочу показать это в формате HTML Table следующим образом. 1 2 3 следует учитывать, что приведенная ниже таблица будет отображаться.

<table> 
 
    <tr> 
 
    <th>1</th> 
 
    <th>2</th> 
 
    <th>3</th> 
 
    </tr> 
 
    <tr> 
 
    <td>1</td> 
 
    <td>11</td> 
 
    <td>21</td> 
 
    </tr> 
 
    <tr> 
 
    <td>1</td> 
 
    <td>12</td> 
 
    <td>21</td> 
 
    </tr> 
 
    <tr> 
 
    <td>1</td> 
 
    <td>13</td> 
 
    <td>21</td> 
 
    </tr> 
 
    <tr> 
 
    <td>2</td> 
 
    <td>11</td> 
 
    <td>21</td> 
 
    </tr> 
 
    <tr> 
 
    <td>2</td> 
 
    <td>12</td> 
 
    <td>21</td> 
 
    </tr> 
 
    <tr> 
 
    <td>2</td> 
 
    <td>13</td> 
 
    <td>21</td> 
 
    </tr> 
 
    
 
</table>

, если их нет таблицы 3 узла не будет отображаться как этот

<table> 
 
     <tr> 
 
     <th>1</th> 
 
     <th>2</th> 
 
    </tr> 
 
     <tr> 
 
     <td>1</td> 
 
     <td>11</td> 
 
     </tr> 
 
     <tr> 
 
     <td>1</td> 
 
     <td>12</td> 
 
     </tr> 
 
     <tr> 
 
     <td>1</td> 
 
     <td>13</td> 
 
     </tr> 
 
     <tr> 
 
     <td>2</td> 
 
     <td>11</td> 
 
     </tr> 
 
     <tr> 
 
     <td>2</td> 
 
     <td>12</td> 
 
     </tr> 
 
     <tr> 
 
     <td>2</td> 
 
     <td>13</td> 
 
     </tr> 
 
     
 
    </table>

Пожалуйста, помогите мне, чтобы достичь этого.

+0

Пробовали ли вы использовать 'foreach' Переберите ваш массив? – jaro1989

+0

Да, я хочу создать динамически основан на внутреннем узле ([1] => Массив ([2] => Массив ([0] => 11 [1] => 12 [2] => 13) [ 3] => Массив ([0] => 21)) независимо от того, является ли это [2] [3] или только [2] или более чем 2 узлом –

ответ

0

Раствор с помощью range, array_map, end и current функции:

// $arr is your initial array 
$parent_keys = range(1, count(current($arr)) + 1); 
echo "<table><tr>" . 
     implode("", array_map(function($v){ 
      return "<th>".$v."</th>"; }, $parent_keys) 
     ); 
echo "</tr>"; 

foreach ($arr as $k => $item) { 
    if (count($item) > 1 && is_array(end($item))) $last = current(end($item)); 
    reset($item); 
    foreach (current($item) as $v) { 
     echo "<tr><td>$k</td><td>$v</td>". (isset($last)? "<td>$last</td>" : "") ."</tr>"; 
    } 
} 

echo "</table>"; 

DEMO link

Каждая последовательность клеток в tr состоит из "ключ" (ключ массива родительского уровня) + значение из текущего элемента массива (который вы назвали Узел [2]) + value от Узел [3] (если есть).
Количество <th> клеток зависит от того, сколько элементов есть каждый вложенный элемент (узел [2], узел [3]) ... в том числе и ключ от родительского уровня

+0

Большое спасибо. Не могли бы вы объяснить это. –

+0

@PravinBankar, добавлено какое-то объяснение – RomanPerekhrest

+0

если вы хотите, я дам вам отверстие сценария, который приходит динамически. Их будет каждый узел отличается от каждого раза, когда на основе выбора пользователя. –

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