如何生成/删除数字序列后面的数字后缀? PHP

时间:2015-05-21 15:33:21

标签: php

我正在处理窗口小部件区域(侧边栏)生成器,它会自动为窗口小部件区域名称添加一个数字后缀。

创建时所需的侧边栏名称输出应为

custom_sidebar_area1
custom_sidebar_area2
custom_sidebar_area3
...

如果删除custom_sidebar_area2

custom_sidebar_area1
custom_sidebar_area3

下一个创建的侧边栏应该再次

custom_sidebar_area2 

之后的一个比custom_sidebar_area4

问题:

此代码段目前适用于创建,并保存在一系列区域和后缀索引中,以便跟踪下一个数字,

$custom_sidebars = get_theme_mod( 'custom_sidebars' );
$new_sidebar_name = $_POST['newSidebarName'];
$suffix = $custom_sidebars ? intval( $custom_sidebars['suffix'] ) + 1 : 1;

$custom_sidebars['areas']['custom_sidebar_area' . $suffix] = $new_sidebar_name ;
$custom_sidebars['suffix'] = $suffix;

保存时这是数组输出

array
(
    [areas] => array
    (
        [custom_sidebar_area5] => 'Title'
        [custom_sidebar_area6] => 'New widget area'
    )
    [suffix] => 6
)

现在这适用于创作,但我需要删除侧边栏 按照顺序并相应地更新后缀。

如果我使用过这样的东西

    $old_sidebar_name = $_POST['oldSidebarName'];
    $custom_sidebars = get_theme_mod( 'custom_sidebars' );
    $suffix = $custom_sidebars ? intval( $custom_sidebars['suffix'] ) - 1 : 1;

    unset( $custom_sidebars['areas'][$old_sidebar_name] );

    $custom_sidebars['suffix'] = $suffix;

订单有效,直到您开始跳过删除,而不是删除最后一个,以便删除数字2.比下一个创建的侧边栏可以覆盖现有的侧边栏。

如果我在删除时不使用后缀更改,则后缀将始终增加,并且先前已删除所有已创建的侧边栏的用户(假设有5个),在新的侧边栏创建时将具有

custom_sidebar_area6

而不是

custom_sidebar_area1

摆脱这种情况的最佳方法是什么? 任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

您可以创建一个扫描当前数组的函数来确定可用的后缀。

以下是我设置的小测试按预期工作:

$a = array('a1'=>1, 'a2'=>2, 'a3'=>4);
function getSuffix($a){
    for($i=1; $i<=count($a)+1; $i++ ){
        if( ! array_key_exists("a$i", $a) ){
            return $i;    
        }    
    }
}

然后这一行:

 $suffix = $custom_sidebars ? intval( $custom_sidebars['suffix'] ) - 1 : 1;

可以成为:

$suffix = $custom_sidebars ? getSuffix($custom_sidebars['area']) : 1;