如何使用php从换行字符串生成一组HTML列表项?
我正在使用带有foreach循环的Google Sheet PHP API
// authentication not shown
$range = 'Sheet3!AD2:Z';
$response = $service->spreadsheets_values->get($spreadsheetId, $range);
$values = $response->getValues();
foreach($values as $val) {
$valuespan = "<span class="record">".implode($val)."</span>";
echo $valuespan;
}
要获得Google工作表中所有行的HTML输出,请使用span标记,如下所示:(显示换行符是为了说明(
<span class="record">Customer 1 n
Exercise Physiologist n
PT, DPT, COMT n
Class Name n
South Physical Therapy n
City 1 n
AR n
</span>
<span class="record">Customer 2 n
Exercise Physiologist n
PT n
Class Name n
Central Therapy n
City 2 n
AL n
</span>
上,然后转到图纸的最后一行。
我需要能够使用分隔符来添加标记,因为数据中有逗号,所以我不能使用逗号;并且我不能在工作表中添加任何其他分隔符。
所以我需要的是这个特定的标记;我需要<h1>
标签中的每个客户和<li></li>
标签中的其他项目,如下所示:
<span class="record">
<h1>Customer 1</h1>
<ul>
<li>Exercise Physiologist</li>
<li>PT, DPT, COMT</li>
<li>Class Name</li>
<li>South Physical Therapy</li>
<li>City 1</li>
<li>AR</li>
</ul>
</span>
我还需要说明空项目,即如果;类名";不退出,则跳过输出该项目的<li></li>
。
我看过这个问题从逗号分隔的列表中生成一组HTML列表项?PHP,但我得到错误explode(): Argument #2 ($string) must be of type string, array given.
如何分解/内爆以输出所需的html?
或者还有其他php函数更有用吗?
编辑12/13/21
我发现我需要能够对一些字段使用if
构造,而这在连接字符串时不起作用,所以这就是我正在使用的。从程序的意义上讲,它可能是丑陋的;如果是,请添加注释。
foreach($values as $val) {
$valuearray =explode("n", implode($val)); // explode string into array
$name = $valuearray[0];
$focus = $valuearray[1];
$certification = $valuearray[2];
$course = $valuearray[3];
$business = $valuearray[4];
$url = $valuearray[5];
$address = $valuearray[6];
$city = $valuearray[7];
$state = $valuearray[8];
echo '<h1 class="name">' . $name . '</h1>';
echo '<ul>';
if($focus ?? true) {echo '<li class="focus">Focus: ' . $focus . '</li>'; }
if($certification ?? true) {echo '<li class="certification">Certification: ' . $certification . '</li>'; }
if($course ?? true) {echo '<li class="course">Course: ' . $course . '</li>'; }
if($url ?? true) {
echo '<li class="business">Business: <a class="business-link" target="_blank" rel="noopener noreferrer" href="https://' . $url . ' ">' . $business . '</a></li>';
} elseif ($business ?? true) {
echo '<li class="business">Business: ' . $business . '</li>';
}
if($address ?? true) {
echo '<li class="address">Location: ' . $address . ', ' . $city . ', ' . $state . '</li>';
} else {
echo '<li class="address">Location: ' . $city . ', ' . $state . '</li>';
}
echo '</ul>';
}
因为单元格值使用n
作为分隔符,所以首先使用explode
函数将单元格值从字符串分解为数组。然后,将此数组中要添加的第一项作为标头。
implode
函数的第一个参数可用于分隔符。您可以使用array_slice
函数将数组的第一个条目以外的所有条目传递到此函数中。如果希望数组项显示为无序列表,可以使用"</li><li>"
作为分隔符。要跳过空列表项,可以使用str_replace
替换"<li></li>"
的所有实例。
foreach($values as $val) {
$valuearray = explode("n", implode($val)); // explode string into array
$valuespan = "<span class="record">";
$valuespan = $valuespan . "<h1>" . $valuearray[0] . "</h1>"; // add heading
$valuespan = $valuespan . "<ul><li>" . implode("</li><li>", array_slice($valuearray, 1)) . "</li></ul></span>"; // add remaining array as list items
$valuespan = str_replace("<li></li>", "", $valuespan); // remove empty list items
echo $valuespan;
}