php 在字符串 b 的多个位置插入字符串 (a) 并连接字符串
php insert string(a) at multiple positions in string b and concatenate the string
我一直在研究解决方案,但我的逻辑还不完整。
我想在多个位置(数组中的位置)将字符串 A 插入到字符串 B 中。
positions 变量数组是一个 strpos() return value[].
字符串 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 菜单导航的字符串。
目前正在 return 重复列表 $menu_items.
我决定使用 JavaScript 作为解决方案。根据需要更容易访问 DOM 元素,并且是解决此解决方案的更好方法,因为它是前端开发而不是服务器端开发。
代码:
// create go-back element button
var goBackEl = document.createElement('li');
goBackEl.innerHTML = '<a class="go-back" href="#"><svg xmlns="http://www.w3.org/2000/svg" width="30" height="30" fill="#FFFFFF" 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>';
// add go-back button to sub-menu as the first child
submenuEl.prepend( goBackEl );
我一直在研究解决方案,但我的逻辑还不完整。
我想在多个位置(数组中的位置)将字符串 A 插入到字符串 B 中。
positions 变量数组是一个 strpos() return value[].
字符串 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 菜单导航的字符串。
目前正在 return 重复列表 $menu_items.
我决定使用 JavaScript 作为解决方案。根据需要更容易访问 DOM 元素,并且是解决此解决方案的更好方法,因为它是前端开发而不是服务器端开发。
代码:
// create go-back element button
var goBackEl = document.createElement('li');
goBackEl.innerHTML = '<a class="go-back" href="#"><svg xmlns="http://www.w3.org/2000/svg" width="30" height="30" fill="#FFFFFF" 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>';
// add go-back button to sub-menu as the first child
submenuEl.prepend( goBackEl );