İyinet'e Hoşgeldiniz!

Türkiye'nin En Eski Webmaster Forum'una Hemen Kayıt Olun!

Kayıt Ol!

Dizi içindeki sayıları nasıl toplarım

Tutaste

0
İyinet Üyesi
Katılım
7 Kasım 2012
Mesajlar
160
Reaction score
0
Merhaba,

Elimde böyle değerler var, ben bu her dizileri toplamak istiyorum ama nasıl yapılır bilmiyorum
array("1-2", "3-7", "12-34", "6-67-34-90", "3-45-67");
Örnek sonuç böyle istiyorum:
Toplam: 1-2=3
Toplam: 3-7=10
Toplam: 12-34=46
Toplam: 6-67-34-90=197
Toplam: 3-45-67=115

Gibi toplatıp ekrana çıktı nasıl yapılır?
 

MuendizZ

0
İyinet Üyesi
Katılım
21 Aralık 2012
Mesajlar
116
Reaction score
1
PHP:
     $D  =   array("1-2", "3-7", "12-34", "6-67-34-90", "3-45-67");
     foreach($D as $d)
     {     $Toplam   = 0;
           $Sayilar    =  explode("-", $d);
           foreach($Sayilar as $S)
                $Toplam+=(double)$S;
           echo "<b>Toplam:</b>".$Toplam."<br/>";
     }

Sanırım yukarıdaki kodla yapabilirsin. ben denemedim, o yüzden hatalı çıkabilir, zaten biraz PHP bilgin varsa, algoritmayı hemen çözüceğine eminim ;)
 

Tutaste

0
İyinet Üyesi
Katılım
7 Kasım 2012
Mesajlar
160
Reaction score
0
Çok teşekkür ederim süper çalıştı tam istediğim gibi oldu değerleride almak için $d kullandım tamam.


Bende bunun gibi çok satır ve uzun değerler var bunları 2 tipten kontrol etmem 1. kontrol yukarıdaki kod ile tamam 2. kontrol şu acaba mümkün mü?

"2-6-4", "2-2-5-6", "7-7-7-7", "9-6-9-2-2"
Bunların kaç farklı olduğunu bulmak gerekiyor
"2-6-4" buradaki her sayı farklı demekki = 3 fark var
"2-2-5-6" burada aynı sayıları bir fark sayıyoruz = 3 fark var
"7-7-7-7" burada tüm sayı aynı = 1 fark var
"9-6-9-2-2" burada da 3 fark var

Yanı aynı sayıları bir fark olarak göreceğiz her ayrı sayı bir farktır

Böyle bir şey mümkün mü?
 

MuendizZ

0
İyinet Üyesi
Katılım
21 Aralık 2012
Mesajlar
116
Reaction score
1
Çok teşekkür ederim süper çalıştı tam istediğim gibi oldu değerleride almak için $d kullandım tamam.


Bende bunun gibi çok satır ve uzun değerler var bunları 2 tipten kontrol etmem 1. kontrol yukarıdaki kod ile tamam 2. kontrol şu acaba mümkün mü?

"2-6-4", "2-2-5-6", "7-7-7-7", "9-6-9-2-2"
Bunların kaç farklı olduğunu bulmak gerekiyor
"2-6-4" buradaki her sayı farklı demekki = 3 fark var
"2-2-5-6" burada aynı sayıları bir fark sayıyoruz = 3 fark var
"7-7-7-7" burada tüm sayı aynı = 1 fark var
"9-6-9-2-2" burada da 3 fark var

Yanı aynı sayıları bir fark olarak göreceğiz her ayrı sayı bir farktır

Böyle bir şey mümkün mü?

Mümkün tabi ki. Aşağıda, daha önceki yazdığım kodun iyileştirilmiş hali var ;) Yine sen eskisini silmeden bunu da dene :)

PHP:
$D  =   array("1-2", "3-7", "12-34", "6-67-34-90", "3-45-67");
     foreach($D as $d)
     {     
           $Sayilar    =  explode("-", $d); 
           echo "<b>Toplam:</b>".array_sum($Sayilar)."<br/>";
           echo "<b>Farklı Sayı Sayısı:</b>".count(array_unique($Sayilar))."<br/>";

     }
 

Tutaste

0
İyinet Üyesi
Katılım
7 Kasım 2012
Mesajlar
160
Reaction score
0
Valla elinize sağlık mükkemmel oldu şahane elleriniz der görmesin


O kadar güzel oldu ki aklıma birşey daha geldi olmazsada olur canınız sağ olsun acaba Fark Sayı Sayısını toplamak?

Toplam:3
1-2Farklı Sayı Sayısı:2
Toplam:10
3-7Farklı Sayı Sayısı:2
Toplam:46
12-34Farklı Sayı Sayısı:2
Toplam:197
6-67-34-90Farklı Sayı Sayısı:4
Toplam:115
3-45-67Farklı Sayı Sayısı:3
Tüm Farkların Toplamı: 13 diye
 

MuendizZ

0
İyinet Üyesi
Katılım
21 Aralık 2012
Mesajlar
116
Reaction score
1
hocam böyle olmayacak :) herşeyi ben yaparsam sen bişey öğrenemezsin,
o yüzden bunu yapmayı da sana bırakıyorum, ilk yazdığım kodla,
sonradan yazdığım kodu kombine edersen istediğin sonucu alıcağına eminim.

ipucu olarak şunu söyleyeyim, ilk kodtaki $Toplam değişkeninin nasıl hesaplandığını takip et. :)
 

Tutaste

0
İyinet Üyesi
Katılım
7 Kasım 2012
Mesajlar
160
Reaction score
0
hocam böyle olmayacak :) herşeyi ben yaparsam sen bişey öğrenemezsin,
o yüzden bunu yapmayı da sana bırakıyorum, ilk yazdığım kodla,
sonradan yazdığım kodu kombine edersen istediğin sonucu alıcağına eminim.

ipucu olarak şunu söyleyeyim, ilk kodtaki $Toplam değişkeninin nasıl hesaplandığını takip et. :)
Tam ipucu verdin ustam tekrar çok çok çok teşekkür ederim elleriniz dert görmesin
Öyle işimiz yaradı ki tekrar teşekkür ederim Allah(cc) sizden razı olsun

Böyle yaptım oldu
PHP:
           echo $d."<b> Farklı Sayı Sayısı:</b>".count(array_unique($Sayilar))."<br/>";
           $Toplam+=(double)count(array_unique($Sayilar));
           echo "<b>Genel Toplam:</b>".$Toplam."<br/>";
 

Tutaste

0
İyinet Üyesi
Katılım
7 Kasım 2012
Mesajlar
160
Reaction score
0
Yeni konu açmayım dedim

Çok oluyoruz ama idare edin ustalar,

array("5-10-30-6", "20-10-50", "8-20", "12-15-45-67-9", "12-23")
böyle bir diziyi aşağıdaki gibi çıktı yapmak istiyorum

1. kural çift tırnak içindeki parça sayısı az olandan başlama
2. çift tırnak içindeki ilk değer büyük olan ile başlama

Çıktı böyle olmalı ("12-23", "8-20", "20-10-50", "5-10-30-6", "12-15-45-67-9")


Böyle birşey buldum array olarak veriyor ben yukarıdaki gibi versin istiyorum ama yapamadım
Birde "12-23", "8-20" ilk değerlerin öncelik büyük olmasına dikkate etmiyor
yardımcı olabilirmisiniz?

PHP:
<?php
function sirala($a, $b)
{
    if ($a == $b) {
        return 0;
    }
    return (strlen($a) < strlen($b)) ? -1 : 1;
}
$a = array("7", "14-12-9-6-4", "7-20", "21-12", "32-30-28", "28");
@usort($a, 'sirala');
      $say = array_count_values($a);
      $kac=count($say)-1;
for ($i=0; $i <= $kac; $i++)
    echo "\"".$a[$i]."\", ";

?>
 

Tutaste

0
İyinet Üyesi
Katılım
7 Kasım 2012
Mesajlar
160
Reaction score
0
Galıba burada sıralama yaparkan "7-20", "21-12" şeklinde yapmasının sebebi 7 sayısı 2 den büyük olması yanı ilk rakama bakıyorum ben istiyorumki - tire karakterine kadar olana baksın "21-12", "7-20" eğer - karaktere kadar bakarak sıralarsa istediim olacak bir yardım edermisiniz

Ben bir dizi olarak uzun uzun seçenekler yazıyorum bunları içinde yazarken zorunlu olarak büyük küçük çift tırnak içindeki seçenek sayısı az çok karışık yazmak zorunda kalıyoruz bu durumu düzeltmek için bu kod ile doğru sıralama ile enkrana basarsak kopyalayıp array() içinde yapıştıracağım
 

MuendizZ

0
İyinet Üyesi
Katılım
21 Aralık 2012
Mesajlar
116
Reaction score
1
Kardeşim aşağıdaki gibi bir algoritma düşündüm, yazımda hata olabilir sen düzelterek dene. Kullanım şeklinde gelince
PHP:
    sirala($Dizi);

PHP:
function sirala(&$D)
{
     if(is_array($D))
     {
           $D_Uzunluk=array();

           # Dizideki tüm değerlerin uzunluklarını bir diziye aktarılacak
           foreach($D as $d)
              $D_Uzunluk[]=count(explode("-",$d));
           
           # Uzunlukları saklayan diziyi kullarak, önce içerdiği sayı adeti bakımından küçükten büyüğe doğru bir sıralama yapılacak
           for($i=0; $i<count($D_Uzunluk); $i++)
           {
                 for($j=0; $j<count($D_Uzunluk); $j++)
                 {
                        if($D_Uzunluk[$i]<$D_Uzunluk[$j])
                        {
                               $tmp_uzunluk=$D_Uzunluk[$i];
                               $D_Uzunluk[$i]=$D_Uzunluk[$j];
                               $D_Uzunluk[$j]=$tmp_uzunluk;

                               $tmp=$D[$i];
                               $D[$i]=$D[$j];
                               $D[$j]=$tmp;
                        }

                 }
           }
  
           
           # Son olarak aynı boyuttaki diziler arasındaki ilk sayıya göre sıralama yapılacak
           for($i=0; $i<count($D_Uzunluk); $i++)
           {
                 $ExpD1=explode("-",$D[$i]);
                 for($j=0; $j<count($D_Uzunluk); $j++)
                 {
                        $ExpD2=explode("-",$D[$j]);
                        if(count($D[$i]) == count($D[$j]))
                        {
                               if((int)$ExpD1[0] < (int)$ExpD2[0])
                               {
                                      $tmp=$D[$i];
                                      $D[$i]=$D[$j];
                                      $D[$j]=$tmp;
                               }
                        }

                 }
           }
         
     }
}
 

Tutaste

0
İyinet Üyesi
Katılım
7 Kasım 2012
Mesajlar
160
Reaction score
0
[MENTION=55558]MuendizZ[/MENTION] ustam Allah(cc) sizden razı olsun baya bir kod gerektiriyormuş
Ben o kadar usta değilim urada echo hangisini yapmam gerekiyor?
Birde çıktı olarak bu şekilde dizideki gibi çift tırnaklı ve virgüllü "12-23", "8-20", "20-10-50", "5-10-30-6", "12-15-45-67-9"
Ben birşeyler yaptım ama olmadı
PHP:
$tmp=$D[$i];
$D[$i]=$D[$j]; 
$D[$j]=$tmp;
Kural yanlış değil değilmi?
Öncelik çift tırnak içindeki parça sayısı öncelik örnek "12-23" bu iki parça sıralama yaparken önce en az parçadan oluşanlar olacak
1 parçalı
2 parçalı
3 parçalı
4 parçalı
5 parçalı
bu şekilde 20 parçaya kadar gidiyor
her parça kendi sırasında ilk sayısı büyük olandan sıralayacak
Örnek: "16", "12", "8", "20-16", "16-12", "12-8", "24-20-16", "20-20-16", "32-24-20-20", "24-20-16-12", "20-16-16-12".......
 

MuendizZ

0
İyinet Üyesi
Katılım
21 Aralık 2012
Mesajlar
116
Reaction score
1
Hocam şimdi bu fonksiyonu kullanarak, elindeki diziyi istediğin formata getirir.

Daha sonra da yazdırmak istersen, bir for veya foreach döngülerinden birini kullanarak istediğin gibi yazdırabilirsin.
Sanırım daha önceki kodlarda böyle bir döngüde olması gerek.


PHP:
function sirala(&$D)
{
     if(is_array($D))
     {
           $D_Uzunluk=array();

           # Dizideki tüm değerlerin uzunluklarını bir diziye aktarılacak
           foreach($D as $d)
              $D_Uzunluk[]=count(explode("-",$d));
           
           # Uzunlukları saklayan diziyi kullarak, önce içerdiği sayı adeti bakımından küçükten büyüğe doğru bir sıralama yapılacak
           for($i=0; $i<count($D_Uzunluk); $i++)
           {
                 for($j=0; $j<count($D_Uzunluk); $j++)
                 {
                        if($D_Uzunluk[$i]<$D_Uzunluk[$j])
                        {
                               $tmp_uzunluk=$D_Uzunluk[$i];
                               $D_Uzunluk[$i]=$D_Uzunluk[$j];
                               $D_Uzunluk[$j]=$tmp_uzunluk;

                               $tmp=$D[$i];
                               $D[$i]=$D[$j];
                               $D[$j]=$tmp;
                        }

                 }
           }
           
           #Dizinin her bir elemanı kendi içinde büyükten küçüğe sıralanıyor.
           for($i=0; $i<count($D_Uzunluk); $i++)
           {
                 $d = explode("-", $D[$i]);
                 for($j=0; $j<count($d); $j++)
                 {
                        for($k=0; $k<count($d); $k++)
                        {
                               if($d[$i]<$d[$j])
                               {
                                      $tmp=$d[$i];
                                      $d[$i]=$d[$j];
                                      $d[$j]=$tmp;
                               }
                        }
                 }
                 $D[$i]   =    implode("-", $d);
           } 
           
           # Son olarak aynı boyuttaki diziler arasındaki ilk sayıya göre sıralama yapılacak
           for($i=0; $i<count($D_Uzunluk); $i++)
           {
                 $ExpD1=explode("-",$D[$i]);
                 for($j=0; $j<count($D_Uzunluk); $j++)
                 {
                        $ExpD2=explode("-",$D[$j]);
                        if(count($D[$i]) == count($D[$j]))
                        {
                               if((int)$ExpD1[0] < (int)$ExpD2[0])
                               {
                                      $tmp=$D[$i];
                                      $D[$i]=$D[$j];
                                      $D[$j]=$tmp;
                               }
                        }

                 }
           }
         
     }
}
 

Tutaste

0
İyinet Üyesi
Katılım
7 Kasım 2012
Mesajlar
160
Reaction score
0
ustam ellerin dert görmesin çok emek ettin ama yapamadım neyi nasıl yapacağımız bilmiyorum bir satır dizi ekledim bunun gibi 160 dizi var diziler uzun olduğu için elle sıralama yapamıyorum buradaki amacım dizideki düzensiz sırayı sıraya koyup tekrar diziye koymak
 

Tutaste

0
İyinet Üyesi
Katılım
7 Kasım 2012
Mesajlar
160
Reaction score
0
Fonksiyona Diziyi göndericeksin, o sana istediğin gibi düzenleyip vericek. Yapman gereken bu kadar. :)
Ben php bilmediğim için tam anlayamıyorum bu yüzden de birşey yapamıyorum

Belki yapmak istediğım tam anlaşılmadı
bendeki diziler düzensiz bunları düzenleyip tekrar yerine koymak ama ekrana çıktısı [0]=>12 gibi değil "20-12", "32-20-12" diye sıralanmış çıktı olacakki ben bu düzenli diziyi kopyalayıp terar dizi içine yapıştıracağım eğer mümkün ise
 

Türkiye’nin ilk webmaster forum sitesi iyinet.com'da forum üyeleri tarafından yapılan tüm paylaşımlardan; Türk Ceza Kanunu’nun 20. Maddesinin, 5651 Sayılı Kanununun 4. maddesinin 2. fıkrasına göre, paylaşım yapan üyeler sorumludur.

Backlink ve Tanıtım Yazısı için iletişime geçmek için Skype Adresimiz: .cid.1580508955483fe5

Üst