编写克隆函数以生成唯一名称

时间:2013-11-14 17:23:51

标签: php

我想在以下数组中创建一个克隆函数,

$usernames = array ( 'jack', 'amy', 'chris');

这样:

克隆插孔,会产生jack-1(因为jack-1在用户名数组中尚不存在)。克隆后,用户名数组应更新为:

$usernames = array ( 'jack', 'amy', 'chris', 'jack-1');

Cloning jack, (again) would result in jack-2

Cloning jack-1, would result in jack-1-1
Cloning jack-1-1, would result in jack-1-1-1
Cloning jack-1-1 (again), would result in jack-1-1-2
Cloning jack-1-1-1 would result in jack-1-1-1-1

依此类推......

我可以使用in_array来做这件事,但是寻找一种有效的方法来做到这一点。

谢谢,

2 个答案:

答案 0 :(得分:1)

我已经对此进行了测试,但确实有效。

首先,我们检查该值是否已存在,如果不存在,我们只需继续添加即可。

如果它确实存在,我们用一个破折号添加递增数字。我们继续递增,直到我们找到一个不存在的...然后我们添加它。

<?php

$array = ['jack', 'sally'];

function cloneFunction($value, $array)
{
    if (!in_array($value, $array))
    {
        $array[] = $value;
    }
    else
    {
        $i = 0;

        while(in_array($value, $array))
        {
            $i++;
            $value = $value . '-' . $i;
        }

        $array[] = $value;
    }

    return $array;
    // Do return $value if you just want the value.
}

print_r(cloneFunction('jack', $array));

答案 1 :(得分:1)

基于Sajan的逻辑,如果我以这种方式修改逻辑,它可以根据要求工作。复制原始用户名并重新解析原始数组就可以了。

$array = array('jack', 'sally');

function cloneFunction($value, $array)
{
    if (!in_array($value, $array))
    {
        $array[] = $value;
    }
    else
    {
        $i = 0;
        $j = 0;

        while(in_array($value, $array))
        {
            $i++;
            $value = $value . '-' . $i;

            $stagedValue = $value;
            while(in_array($value, $array))
            {
                $j++;
                $value = $stagedValue . '-' . $j;
            }
            $j = $i;
        }

        $array[] = $value;
    }

    return $array;
    // Do return $value if you just want the value.
}

print_r(cloneFunction('jack', $array));