我想在以下数组中创建一个克隆函数,
$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来做这件事,但是寻找一种有效的方法来做到这一点。
谢谢,
答案 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));