我希望能够在表格中显示多维关联数组。这些数组由Solarium API创建,用于调试任何索引问题。每个数组都有不同数量的数组和键。
我想让它以任何数字或数组和键的方式保存。我开始使用foreach循环,但我在这一点上陷入困境。我该怎么做呢?
我到目前为止的代码:
foreach ($metadatas as $metadata) {
foreach($metadata as $type => $data) {
echo '<tr>';
echo '<td>'.$type.'</td>';
echo '<td>'.$data.'</td>';
echo '</tr>';
}
}
这是我使用print_r()得到的数组:
Solarium\QueryType\Extract\Query Object
(
[options:protected] => Array
(
[handler] => update/extract
[resultclass] => Solarium\QueryType\Extract\Result
[documentclass] => Solarium\QueryType\Update\Query\Document\Document
[omitheader] =>
[extractonly] =>
[uprefix] => ignored_
[commit] => 1
[file] => http://url.com/branch/files/2015/03/Client-Feedback-Form.doc
[document] => Solarium\QueryType\Update\Query\Document\Document Object
(
[boost:protected] =>
[modifiers:protected] => Array
(
)
[key:protected] =>
[fieldBoosts:protected] => Array
(
[id] =>
[site] =>
[description] =>
[url] =>
[title] =>
)
[version:protected] =>
[helper:protected] => Solarium\Core\Query\Helper Object
(
[placeHolderPattern:protected] => /%(L|P|T|)([0-9]+)%/i
[assembleParts:protected] =>
[derefencedParamsLastKey:protected] => 0
[query:protected] => Solarium\QueryType\Update\Query\Document\Document Object
*RECURSION*
)
[filterControlCharacters:protected] => 1
[fields:protected] => Array
(
[id] => 227-7653
[site] => Branch Name
[description] =>
[url] => http://url.ca/branch/files/2015/03/Client-Feedback-Form.doc
[title] => Client Feedback Form
)
)
)
[fieldMappings:protected] => Array
(
[content_type] => type
[author] => authors
[last_modified] => lastModifiedDate
[creation_date] => creationDate
[content] => content
)
[helper:protected] =>
[params:protected] => Array
(
)
)
答案 0 :(得分:0)
我需要更多虚假的互联网点来评论。相反,你得到我糟糕的答案。我尝试了某种递归函数调用。
function someFunction($table , $array){
foreach($array as $key => $value){
if(is_array($value)){
someFunction(&$table, $value)
}
else {
//Add to your existing $table
}
}
return $table;
}
$table = someFunction("" , array());
显然,这是超级简单的观点。但这个想法是让你的表越来越深入到数组中。当你停止进入新阵列时,它最终会退出。我做了类似的事情,回过头来绕过一个DOMDocument()来构建一个超级复杂的XML。
但是,当您不知道阵列的可能大小或深度时,这才真正有用。如果你的数组有密钥,即使它是多维的,你知道它会存在或不会存在以及它们有多深。在评论中按照答案进行操作可能会更好,只需构建一个漂亮的HTML页面即可。
祝你好运。答案 1 :(得分:0)
从输出的第一行可以看出,它不是一个数组,而是一个OBJECT!正如您在[options:protected]中看到的那样,它是受保护的变量,因此您无法从外部foreach循环访问它。 你可以做的是声明一个循环函数在那个类:
class Query{
....
....
public function iterate(){
foreach ($this->options as $metadata) {
foreach($metadata as $type => $data) {
echo '<tr>';
echo '<td>'.$type.'</td>';
echo '<td>'.$data.'</td>';
echo '</tr>';
}
}
}
}
然后在课外召唤:
$object->iterate();
您可以在此处详细了解:http://php.net/manual/en/language.oop5.iterations.php