Php 将任何多维数组显示为html表
我习惯于将任何类型的多维数组显示为人类可读的html表。例如,此数组:Php 将任何多维数组显示为html表,php,html,arrays,Php,Html,Arrays,我习惯于将任何类型的多维数组显示为人类可读的html表。例如,此数组: $arr = array ( 'root' => array( 'main' => array ( 'members' => array( array ('identifier' => '36', 'fullname' => 'jonathan carter'), array ('identifier' => '42', 'fulln
$arr = array
(
'root' => array(
'main' => array (
'members' => array(
array ('identifier' => '36', 'fullname' => 'jonathan carter'),
array ('identifier' => '42', 'fullname' => 'hello world')
)
)
)
);
成为带有echo array2table$arr的表,true:
正如您所看到的,我的问题是,当多个数组只包含一个子数组时,表头太多。这就是我想要的:
你可能会说:你试过什么?
在显示表头之前,我创建并调用了一个递归函数,如果存在嵌套表,该函数将返回一个键数组:
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');
然后我用'>'连接这些值,它就成为我的新表头。但是我需要深入研究数组,因为我不想显示main>members和members。但我没有成功
如果有任何帮助,我将不胜感激。我的建议是保持表格打印的原样,并创建一个新函数,该函数将获取数组,然后将其转换为某种数组,在打印时将显示您希望显示的内容
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')
)
)
)
);
进入
在这一点上,我非常同意@Anthony!所以他还没有找到CSS$路径=;将$arr_path设置为$v{$path.='['.$v.]';},然后通过$deep=${'arr'.$path}@mclaassen访问更深的数组,这与形式无关,与内容有关。我没有在这个例子中使用CSS。@AsKaiser FR是的,我知道。我在为你辩护安东尼的话。
$arr = array
(
'root > main > members' => array(
array ('identifier' => '36', 'fullname' => 'jonathan carter'),
array ('identifier' => '42', 'fullname' => 'hello world')
)
);