将任何多维数组显示为html表

时间:2014-07-09 01:46:37

标签: php html arrays

我使用this function将任何类型的多维数组显示为人类可重定义的html表。例如,这个数组:

$arr = array
(
  'root' => array(
    'main' => array (
      'members' => array(
        array ('identifier' => '36', 'fullname' => 'jonathan carter'),
        array ('identifier' => '42', 'fullname' => 'hello world')
      )
    )
  )
);

成为一个表格(echo array2table($arr, true)):

html table

正如您所看到的,我的问题是,当多个数组只包含一个子数组时,表标题太多。这就是我想要的:

enter image description here

你可能会说:“你尝试了什么?” 好吧,在显示表头之前,我创建并调用了一个递归函数,如果有嵌套表,它会返回一个键数组:

function nextTableHeaders($array)
{
    // requires an array with only 1 child
    if (!is_array($array) || count($array) !== 1)
        return array();

    $key = key($array);

    return array_merge(array($key), nextTableHeaders($array[$key]));
}

在这种情况下,它返回:

array('root', 'main', 'members');

然后我用'>加入值'它成了我新的表头。但我需要深入研究数组(因为我不想显示“主要>成员”和“成员”)。但我没有成功。

我将不胜感激。

1 个答案:

答案 0 :(得分:0)

我的建议是按原样保持表格打印,并创建一个新功能,该功能将采用数组,然后将其转换为数组,在打印时将显示您希望显示的内容。

function compressArray($array) {
    // Non-arrays and multiple-key arrays are unaffected
    if (!is_array($array) or count($array) !== 1)
        return $array;

    // This is a recursive algorithm
    $child = compressArray(current($array));

    // Compression unnecessary when child is non-array or a multiple-key array
    if (!is_array($child) or count($child) !== 1)
        return $array;

    // Both parent and child are single key arrays so compress
    $new_key = key($array) . " > " . key($child);
    return array($new_key => current($child));
}

这将转换

$arr = array
(
    'root' => array(
        'main' => array (
            'members' => array(
                array ('identifier' => '36', 'fullname' => 'jonathan carter'),
                array ('identifier' => '42', 'fullname' => 'hello world')
            )
        )
    )
);

进入

$arr = array
(
    'root > main > members' => array(
        array ('identifier' => '36', 'fullname' => 'jonathan carter'),
        array ('identifier' => '42', 'fullname' => 'hello world')
    )
);