PHP-如何在数组中插入新元素以避免重复?

时间:2019-07-13 10:15:10

标签: php arrays recursion

我想创建一个函数,该函数将数组$arr_previsioni,值$previsione和指示位置的数字$pos作为输入参数。
该功能应:
1-如果值$ previsione不存在,请添加。
2-如果输入中提供的$ previsione值已经存在于数组中,则它必须修改$ previsione的值,使其与所有其他值都没有不同,最后将其添加到数组中。
< br />

本质上给定一个输入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

我希望自己能自己解释

1 个答案:

答案 0 :(得分:1)

似乎您正在寻找这样的东西:

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中。如果它是$previsione的0到90之间的新随机值,则再次检查循环条件,直到数组中不再存在该值为止。

请注意,一旦使用了0到90之间的所有值,此例程就会失败。

我也无法纠正所有其他问题,例如:

  • 在用于处理数组的函数中具有echo '<br>';
  • 数组中有不需要的字符串键。默认数字键可能可以。
  • 错误的数组初始化例程。
  • 我喜欢用英语编程,因为编程语言是英语。混合两种语言不会帮助其他人阅读您的代码,除非他们碰巧是意大利语。我是荷兰人我敢肯定,您不想阅读荷兰语代码。相反,您的评论是英文的。他们是只为问题添加的吗?