1 回答
TA贡献1891条经验 获得超3个赞
id 部分没有被添加,因为结果preg_split是:
array(3) {
[0]=>
string(43) "[tab title="Tab A" content="Tab a content.""
[1]=>
string(41) "tab title="Tab B" content="Tab B content""
[2]=>
string(42) "tab title="Tab C" content="Tab C content"]"
}
这意味着str_replace('[tab', '[tab id="'.$id.'-'.$i.'"', $tabID)foreach 上的 不会起作用,因为对于数组索引 (1, 2) 没有[tab要替换的字符串。
一种解决方法是使用如下函数检查是否[tab存在strpos:
$content = '[tab title="Tab A" content="Tab a content."][tab title="Tab B" content="Tab B content"][tab title="Tab C" content="Tab C content"]';
$contentID = preg_split('/(\]\[)|(\]\s*\[)/', $content);
// set a new array
$newContentID = array();
// set a unique ID
$id = 'unique';
// include an id attribute for each string part
foreach ( $contentID as $i => $tabID ) {
$newContentID[$i] = strpos($tabID, 'id=') === false ? addId($tabID, $id, $i) : $tabID;
}
$content = implode('][',$newContentID);
function addId($tabID, $id, $i) {
if (strpos($tabID, '[tab') === 0) {
return str_replace('[tab', '[tab id="'.$id.'-'.$i.'"', $tabID);
} else if (strpos($tabID, 'tab') === 0) {
return 'tab id="' . $id . '-' . $i . '"' . substr($tabID, 3);
}
}
结果echo $content:
[tab id="unique-0" title="Tab A" content="Tab a content."][tab id="unique-1" title="Tab B" content="Tab B content"][tab id="unique-2" title="Tab C" content="Tab C content"]
- 1 回答
- 0 关注
- 114 浏览
添加回答
举报