• 06-12-2020, 19:52:15
    #1
    Örnek array;
    $arr = array('1', '1', '1', '1', '2' '2' ,'3' ,'3' ,'4','5');
    Bu dizeden benzersiz eleman çekmek istiyorum elde etmek istediğim sonuç;
    array('1','2','3'); // arr dizesinden benzeriz 3 eleman.

    Şimdiden herkese teşekkürler.

    Edit: Yapmak istediğim şey;
    1 gelme olasılığı %50
    2 gelme olasılığı %30
    3 gelme olasılığı %100
    4 gelme olasılığı %10
    5 gelme olsuluğı %60
    diyelim. Bunları array içine 1 i 50 defa, 2 yi 30 defa, 3 ü 100 defa push ettiriyorum sonra random olarak ekrana basıyorum ama işte benzersiz olma koşulunu koyamıyorum...
  • 06-12-2020, 19:54:27
    #2
    Üyeliği durduruldu
    $arr = array('1', '1', '1', '1', '2', '2' ,'3' ,'3' ,'4','5');
    
    // tüm benzersiz elemanlar.
    $uniq = array_unique($arr);
    print_r($uniq);
    
    // ilk 3 benzersiz eleman
    $uniq3 = array_slice($uniq, 0, 3);
    print_r($uniq3);
  • 06-12-2020, 19:55:51
    #3
    Kod olarak degilde mantiksal anlatayim
    Farkli bir array olusturun ic ice foreach kurun if kontrolu ile array1 icindekilerle array2 icindekileri kontrol ettirin eger yoksa array2 ye kaydedin.
  • 06-12-2020, 19:58:43
    #4
    awoken adlı üyeden alıntı: mesajı görüntüle
    $arr = array('1', '1', '1', '1', '2', '2' ,'3' ,'3' ,'4','5');
    
    // tüm benzersiz elemanlar.
    $uniq = array_unique($arr);
    print_r($uniq);
    
    // ilk 3 benzersiz eleman
    $uniq3 = array_slice($uniq, 0, 3);
    print_r($uniq3);
    O mantıkta olmuyor evet çalışır da yapmak istediğim o değil..
    1 gelme olasılığı %50
    2 gelme olasılığı %30
    3 gelme olasılığı %100
    4 gelme olasılığı %10
    5 gelme olsuluğı %60
    diyelim. Bunları array içine 1 i 50 defa, 2 yi 30 defa, 3 ü 100 defa push ettiriyorum sonra random olarak ekrana basıyorum ama işte benzersiz olma koşulunu koyamıyorum... Çıldırttı..
  • 06-12-2020, 20:00:26
    #5
    burakonline95 adlı üyeden alıntı: mesajı görüntüle
    Kod olarak degilde mantiksal anlatayim
    Farkli bir array olusturun ic ice foreach kurun if kontrolu ile array1 icindekilerle array2 icindekileri kontrol ettirin eger yoksa array2 ye kaydedin.
    Aynen o şekilde yapıyorum şuan ama işte işin içine yüzde mevzusu girince benzer elemanları kafadan elemiyorum.. O yüzden patlıyor
  • 06-12-2020, 20:08:49
    #6
    Üyeliği durduruldu
    XAWeb adlı üyeden alıntı: mesajı görüntüle
    O mantıkta olmuyor evet çalışır da yapmak istediğim o değil..
    1 gelme olasılığı %50
    2 gelme olasılığı %30
    3 gelme olasılığı %100
    4 gelme olasılığı %10
    5 gelme olsuluğı %60
    diyelim. Bunları array içine 1 i 50 defa, 2 yi 30 defa, 3 ü 100 defa push ettiriyorum sonra random olarak ekrana basıyorum ama işte benzersiz olma koşulunu koyamıyorum... Çıldırttı..
    Yanlış anlamadıysam bu push edilen veriler arasından 3 tane seçilecek. Ama aynı iki şey gelmeyecek? Şöyle yapılabilir:
    $oranlar = [
    '1' => 50,
    '2' => 30,
    '3' => 100,
    '4' => 10,
    '5' => 60
    ];
    $secim_sayisi = 3;
    
    $arr = [];
    
    foreach($oranlar as $sayi => $oran) {
     $arr = array_merge($arr, array_fill(0, $oran, $sayi));
    }
    
    $secimler = [];
    
    for($i = 0; $i < $secim_sayisi; $i++) {
     $secim = $arr[array_rand($arr)];
     $arr = array_diff($arr, [$secim]);
     array_push($secimler, $secim);
    }
    print_r($secimler);
  • 06-12-2020, 20:11:36
    #7
    awoken adlı üyeden alıntı: mesajı görüntüle
    Yanlış anlamadıysam bu push edilen veriler arasından 3 tane seçilecek. Ama aynı iki şey gelmeyecek? Şöyle yapılabilir:
    $oranlar = [
    '1' => 50,
    '2' => 30,
    '3' => 100,
    '4' => 10,
    '5' => 60
    ];
    $secim_sayisi = 3;
    
    $arr = [];
    
    foreach($oranlar as $sayi => $oran) {
     $arr = array_merge($arr, array_fill(0, $oran, $sayi));
    }
    
    $secimler = [];
    
    for($i = 0; $i < $secim_sayisi; $i++) {
     $secim = $arr[array_rand($arr)];
     $arr = array_diff($arr, [$secim]);
     array_push($secimler, $secim);
    }
    print_r($secimler);
    Şahanesin ellerine sağlık array_diff bunu not aldım