0

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

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

这样:

克隆 jack,将导致 jack-1(因为 jack-1 在 usernames 数组中尚不存在)。克隆后,用户名数组应更新为:

$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 来做到这一点,但要寻找一种有效的方法来做到这一点。

谢谢,

4

2 回答 2

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));
于 2013-11-14T17:33:39.900 回答
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));
于 2013-11-14T21:52:01.603 回答