我希望能够在表中显示多维关联数组。这些数组由 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
(
)
)
我需要更多虚假的互联网点来评论。 所以相反,你得到了我糟糕的答案。 我会尝试某种递归函数调用。
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页面。
祝你好运。
正如你从输出的第一行看到的,它不是一个数组,而是一个对象!正如你在 [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