【发布时间】:2022-01-04 11:13:13
【问题描述】:
我一直在研究解决方案,但我的逻辑还不完全到位。
我希望将多个位置(数组中的位置)的字符串 A 插入字符串 B。
位置变量数组是strpos()返回值[]。
字符串 B 必须与自身连接,因此它包含原始字符串,但在多个位置插入了新字符串 A。
到目前为止的逻辑如下:
function add_submenu_back_item( $items, $args ){
if( 'top-menu' == $args->theme_location ){
$menu_item_back = '<a class="go-back"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-arrow-left-short" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M12 8a.5.5 0 0 1-.5.5H5.707l2.147 2.146a.5.5 0 0 1-.708.708l-3-3a.5.5 0 0 1 0-.708l3-3a.5.5 0 1 1 .708.708L5.707 7.5H11.5a.5.5 0 0 1 .5.5z"/>
</svg></a>';
$subMenuPos = strpos($items, 'sub-menu');
$new_items = '';
$arrayPos = strpos_all( $items, 'sub-menu' );
$offset = 10;
$values;
for ($i = 0; $i <= count($arrayPos) - 1; $i++) {
// $new_items = substr_replace($items, $menu_item_back, $arrayPos[$i] + $offset, 0);
echo substr_replace($items, $menu_item_back, $arrayPos[$i] + $offset, 0);
}
}
return ''; // testing mode, should be $new_items but doesnt seem to output the inserted value
}
add_filter( 'wp_nav_menu_items', 'add_submenu_back_item', 10, 2 );
我认为逻辑应该表达的内容:
- substr() 获取当前startPos和endPos切出字符串。
- 将插入值添加到 substr() 值的末尾。
- 如果我们已经有一个 substr() 值,则将带有插入值的新 substr() 添加到最后一个。
- 重复此逻辑直到 for 循环结束。
我正在尝试将 $menu_item_back 插入 $menu_items。 $items 是一个代表 HTML 菜单导航的字符串。
目前它正在返回一个重复的列表 $menu_items。
【问题讨论】:
-
有一个输入和想要输出的例子会很有帮助。
-
更具体 - 您遇到了什么具体问题?你究竟需要什么帮助?这个问题(虽然实际上你并没有真正问过一个问题,如果你把它读回来)是不清楚的 - 正如 KIKO 所提到的,如果没有看到示例输入和输出数据(预期和实际),就更难理解了。
-
谢谢,是的,我已经更新了我的问题。如果您需要更多详细信息或屏幕截图,请告诉我。
-
不确定我是否正确解析了您的问题,但如果您正在做的部分工作是将所有出现的一个子字符串替换为另一个子字符串,那么使用preg_replace 会简单得多(一行) .然后,您可以根据需要管理您的串联。
标签: php arrays string concatenation substr