【发布时间】:2018-07-14 14:31:12
【问题描述】:
这里我有一个数组,里面有内容,它们是一个对象、两个或更多——取决于所需的标签;嵌套在多维数组中的第一个元素将是文本输出,除非它是一个数组,否则数组中的第一个元素将是文本。
但是数组中的其他内容是引用了它们对应的HTML标签,如:
[1] => Array
(
[0] => bo <====== Text to output
[1] => bold <====== tag to be within
)
但是,在简单的模块中,我希望内容不要不断重复此类响应,例如:
This is a test <b>bo</b><i><b>ld</b></i><i>,</i> <u><i>u</i></u><u>nderline</u> ...
输出应该是:
This is a test<b>bo<i>ld</i></b><i>, <u>u</u></i><u>nderline</u> ...
这是我目前拥有的 PHP 代码...
$use = array();
$base = "";
foreach ($build as $part => $data) {
// print_r($use);
if(!is_array($data)){
$base .= $data;
} else {
$text = array_shift($data);
if(!is_array($data[0])){
$data = array($data[0]);
} else {
$data = $data[0];
}
$removed = array_diff($use,$data);
foreach (($data) as $tag) {
if (in_array($tag, array_diff($use,$data))) {
$base .= "<\/" . $tag . ">";
} elseif(!in_array($tag, $use)){
$base .= "<" . $tag . ">";
array_push($use, $tag);
}
}
$use = $data;
$base .= $text;
}
}
print_r($base);
如果需要,这里是数组(JSON 格式!):
["This is a test\nIncluding ",["bo","bold"],["ld",["italic","bold"]],[", ","italic"],["u",["underline","italic"]],["nderlined","underline"],", ",["strike-through","strike"],", and ",["italic","italic"],"\ntext:\n\n",["numbered lists",["underline","strike","italic","bold"]],["\n",[]],"as well as",["\n",[]],["non ordered lists","http:\/\/test.com"],["\n",[]],"it works very well",["\n",[]],["try it","http:\/\/google.com"],"\n",["http:\/\/google.com",["bold","http:\/\/google.com"]],"\n\n",["wow","bold"],"\n",["lol","bold"]]
任何帮助将不胜感激...谢谢!
【问题讨论】:
-
您可以使用
document.createElement()使用 JavaScript 来完成此操作,我相信这会容易得多...真的必须使用 PHP 来完成吗? -
@Zeke 遗憾的是,它确实必须在 PHP 中完成,以使所有内容尽可能快地显示内容,如果您对如何在 PHP 中执行此操作有任何想法,将不胜感激 -因为我一直在努力解决这个问题 8 小时......
-
好的,我问是因为您以 JSON 格式提供了数组,这表明 JavaScript 是要走的路……但可以肯定。 PHP 脚本采用 JSON 格式的数组?我的意思是,它必须首先被解码,对吗? (我想这是你的
$build变量) -
@zeke 是正确的(我把它放在 JSON 格式,我认为人们将 JSON 加载到 PHP 中进行测试会更容易)
标签: php html arrays json html-parsing