Я хочу создать функцию, которая принимает в качестве входных параметров массив $arr_previsioni, значение $previsione и число $pos, указывающее позицию.
Функция должна:
1 - добавьте значение $previsione, если оно еще не существует.
2 - Если значение $previsione, указанное во входных данных, уже присутствует в массиве, он должен изменить значение $previsione так, чтобы оно не отличалось от всех остальных, и в конце добавить его в массив.
По сути, учитывая входное число x, я должен создать массив уникальных чисел с этим приоритетом: если число x, которое я дал на входе, уже присутствует в массиве, то нам нужно изменить число x (добавляя или вычитая что-то), чтобы сделать его уникальным.
function aggiungiPrevisione($previsione,$pos,$arr_previsioni){
echo '<br>';
// if it is the first element of the array
if ($pos == 1){
$arr_previsioni['PREVISIONE1'] = $previsione;
return $arr_previsioni;
}
$numero_elementi = count($arr_previsioni);
foreach($arr_previsioni as $key=>$value){
for($i=0; $i <= $numero_elementi+2; $i++){
// Verifica se esiste
if (in_array($previsione, $arr_previsioni)){
// The same number was found in array
if ($previsione > 45){
$previsione = $previsione - 13;
} else {
$previsione = $previsione + 13;
}
$previsione = getNumeroGiocabile($previsione); // returns a number from 0 to 90
} // end checking
} // end for
} // end foreach
// Add $previsione in array
$arr_previsioni['PREVISIONE'.$pos] = $previsione; // by Vincent Decaux
return $arr_previsioni;
}
$previsione = makePrevisione(); // return number from 1 to 90
$arr_previsioni = array(); // initially empty
for($pos=1; $pos<=24; $pos++){
$arr_previsioni = aggiungiPrevisione($previsione,$pos,$arr_previsioni);
}
var_dump($arr_previsioni);
Созданная мной функция возвращает массив из 24 элементов, но некоторые из них совпадают с другими. Вот значения массива:
array(24) {
["PREVISIONE1"]=>
int(30)
["PREVISIONE2"]=>
int(71)
["PREVISIONE3"]=>
int(22)
["PREVISIONE4"]=>
int(1)
["PREVISIONE5"]=>
int(67)
["PREVISIONE6"]=>
int(51)
["PREVISIONE7"]=>
int(35)
["PREVISIONE8"]=>
int(14)
["PREVISIONE9"]=>
int(72)
["PREVISIONE10"]=>
int(57)
["PREVISIONE11"]=>
int(11)
["PREVISIONE12"]=>
int(76)
["PREVISIONE13"]=>
int(41)
["PREVISIONE14"]=>
int(40)
["PREVISIONE15"]=>
int(39)
["PREVISIONE16"]=>
int(37)
["PREVISIONE17"]=>
int(34)
["PREVISIONE18"]=>
int(29)
["PREVISIONE19"]=>
int(42)
["PREVISIONE20"]=>
int(55)
["PREVISIONE21"]=>
int(55)
["PREVISIONE22"]=>
int(55)
["PREVISIONE23"]=>
int(55)
["PREVISIONE24"]=>
int(55)
}
как видите, есть повторяющиеся значения (55).
Я хотел бы, чтобы функция вставляла номер $previsione, как указано, в случае, если он еще не существует в массиве, иначе ему пришлось бы изменить значение $previsione (чтобы получить номер, которого еще нет) и добавить это в массив.
Посмотрим, смогу ли я упростить понимание проблемы.
Указав эти входные параметры:
$arr_previsione = (
"PREVISIONE1"=>
30,
"PREVISIONE2"=>
71,
"PREVISIONE3"=>
22,
"PREVISIONE4"=>
1,
"PREVISIONE5"=>
67,
"PREVISIONE6"=>
51,
"PREVISIONE7"=>
35);
$pos = 8;
$previsione = 22;
$arr_previsioni = aggiungiPrevisione($previsione8,8,$arr_previsioni);
Результат, который я могу сейчас получить с помощью функции, показанной выше, может быть таким:
$arr_previsione = (
"PREVISIONE1"=>
30,
"PREVISIONE2"=>
71,
"PREVISIONE3"=>
22,
"PREVISIONE4"=>
1,
"PREVISIONE5"=>
67,
"PREVISIONE6"=>
51,
"PREVISIONE7"=>
35,
"PREVISIONE8"=>
22); // error
Что я предпочел бы получить, так это:
$arr_previsione = (
"PREVISIONE1"=>
30,
"PREVISIONE2"=>
71,
"PREVISIONE3"=>
22,
"PREVISIONE4"=>
1,
"PREVISIONE5"=>
67,
"PREVISIONE6"=>
51,
"PREVISIONE7"=>
35,
"PREVISIONE8"=>
48); // after the change the new value entered should be 48 or any other number, it is enough that it is not already present in the array itself
Надеюсь, я объяснил себя
Пожалуйста, редактировать ваш вопрос и включите пример массива, входных значений для вашей функции и ожидаемых результатов.
Это может быть очень простая проблема для решения, но я не понимаю вашего вопроса. Можем ли мы увидеть пример ввода и желаемый результат? Кажется, я не могу найти рекурсию в вашем вопросе.
Я все еще не понимаю вопроса. Возможно, было бы полезно, если бы вы объяснили, для чего используется этот код? Я понимаю, что Previsione — это прогноз, но прогнозирование чего? Также наличие чего-то вроде $previsione = getNumeroGiocabile($previsione); в вашем коде не помогает. Это просто не имеет смысла, особенно потому, что мы не знаем, что он делает. Я не думаю, что «возвращает число от 0 до 90» очень полезно. Это случайно? Последовательный? Кто знает?
@KIKOSoftware возвращает целое число от 0 до 90. Просто....
Тогда почему getNumeroGiocabile() требует аргумента? Если он делает что-то вроде return rand(0, 90);, ему не нужен $previsione в качестве аргумента.
@KIKOSoftware Неважно, что делает функция getNumeroGiocabile(); важна основная функция aggiungiPrevisione()
Люди @LuigiSpezia говорят вам, какая информация им нужна, чтобы помочь вам решить вашу проблему, а вы говорите им, что она им не нужна, это не поможет нам / им помочь вам.
@John.M Я даю всю необходимую информацию. Где ты увидел, что я не люблю помощь?






Кажется, вы ищете что-то вроде этого:
function aggiungiPrevisione($previsione,$pos,$arr_previsioni)
{
echo '<br>';
// if it is the first element of the array
if ($pos == 1) {
$arr_previsioni['PREVISIONE1'] = $previsione;
return $arr_previsioni;
}
// Make sure $previsione does not yet exist
while (in_array($previsione, $arr_previsioni)) {
$previsione = rand(0, 90);
}
// Add $previsione in array
$arr_previsioni['PREVISIONE'.$pos] = $previsione;
return $arr_previsioni;
}
Обратите внимание, что я изменил только среднюю часть этой функции. У меня есть простой цикл while, проверяющий, находится ли значение $previsione в массиве $arr_previsioni. Если это новое случайное значение от 0 до 90, генерируется для $previsione, и условие цикла проверяется снова, пока значение больше не присутствует в массиве.
Обратите внимание, что эта процедура завершится ошибкой, как только будут использованы все значения от 0 до 90.
Я также не могу исправить все остальные проблемы, такие как:
echo '<br>'; в функции, предназначенной для управления массивом.
Так у вас ошибка или проблема? Кстати,
$arr_previsioni['PREVISIONE'. $pos] = $previsione;избежит 24 условий...