2013-11-14 9 views
0

Я хотел бы создать функцию клонирования на следующий массив,Дать функцию клонирования для создания уникальных имен

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

, что:

Клонирование домкрат, приведет к гнезду-1 (так как разъем -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, чтобы сделать это, но ищет эффективный способ сделать это.

Спасибо,

+0

Гарантировано, что 'jack-1' не существует при клонировании' jack'? – ComFreek

+0

В первый проход, да. Гарантируется, что jack-1 не существует. – Jake

ответ

1

Основываясь на логике Саджана, он работает в соответствии с требованием, если я модифицирую логику таким образом. Копирование исходного имени пользователя и повторный анализ исходного массива, делает трюк.

$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)); 
+0

Интересно, есть ли более элегантный способ сделать это, сократив код пополам. :) – Jake

+0

Удивительный! Рад, что ты это понял. –

+0

Спасибо, что помог! – Jake

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)); 
+0

Я отредактировал это через минуту после того, как я отправил исправление логики. –

+0

hmm .. Что делать, если я хочу вернуть только новое сгенерированное имя клона вместо массива? – Jake

+0

@Jake, тогда вы можете сделать 'return $ value' вместо' return $ array'. –

Смежные вопросы