Asp - Php - Cgi - Perl
Php Array'i Kendi İçerisinde Ayrıştırma (GROUP BY Gibi)
Php Array'i Kendi İçerisinde Ayrıştırma (GROUP BY Gibi)
-
Hocalarım şöyle bir kodum olsun
$Dizimiz=array(); $Deger1=[1,4,5,3]; $Deger2=[1,8,8,1]; $Deger3=[2,0,1,7]; $Deger4=[1,4,5,3]; $Deger5=[1,8,8,1]; $Deger6=[2,0,1,7]; $Deger7=[1,4,5,3]; $Deger8=[1,4,5,3]; $Deger9=[2,0,1,7]; $Dizimiz[]=$Deger1; $Dizimiz[]=$Deger2; $Dizimiz[]=$Deger3; $Dizimiz[]=$Deger4; $Dizimiz[]=$Deger5; $Dizimiz[]=$Deger6; $Dizimiz[]=$Deger7; $Dizimiz[]=$Deger8; $Dizimiz[]=$Deger9; print_r(Ayrıştır($Dizimiz));
Bu Kodun Çıktısının Şöyle olmasını istiyorum Yani Şu Array'i versin bana
$SonucArray=[ [1,4,5,3], [1,8,8,1], [2,0,1,7], ];
Yani içerisindeki tekrarlı verileri kaldırmak istiyorum..
Kendi yazdığım algoritma Bir hayli yavaş....
tek tek satır ve stunları kontrol ediyorum eşitse yeni array'e at gibi basit bir algoritma..
Bunu daha hızlı hale getirecek bir algoritma var mıdır ? Link vs verir misiniz rica etsem ?
Edit; Array_Unique iş görmüyor
MhmdAlmz tarafından 24/Oca/17 15:56 tarihinde düzenlenmiştir -
http://stackoverflow.com/questions/982344/grouping-arrays-in-php
http://php.net/manual/fr/function.array-combine.php
https://github.com/jakezatecky/array_group_by
http://ouzo.readthedocs.io/en/latest/utils/arrays.html#groupby
şöyle bir kaç link buldum
-
Şu fonksiyon işe yarıyor gibi.
function array_unique_multidimensional($input) { $serialized = array_map('serialize', $input); $unique = array_unique($serialized); return array_intersect_key($input, $unique); } print_r(array_unique_multidimensional($Dizimiz));
-
Claw bunu yazdı
http://stackoverflow.com/questions/982344/grouping-arrays-in-php
http://php.net/manual/fr/function.array-combine.php
https://github.com/jakezatecky/array_group_by
http://ouzo.readthedocs.io/en/latest/utils/arrays.html#groupby
şöyle bir kaç link buldum
Bana Algoritma mantığı lazım içerisine kendi kodlarımı yerleştireceğim. Hazır fonksiyon vs değil teşekkürler genede :)
https://github.com/jakezatecky/array_group_by <--- EDİT Hazır böl fethet algoritmalarını kullanmışşş :/
bi iş gören bu var buna da hız testi uygulayayim bir
Shock56 , Hocam hazır fonksiyon olmazsa iyidir Aslında Array_Unique tam aradığım birşey gibi ama arka planda bu fonksiyonu çalıştıran mantık lazım
-
$dizimiz[0] dediğinde [1,4,5,3] değerinin string olarak gelmesini istiyorsan şayet şu yazdığım şekilde kodlarsan istediğin sonuca ulaşırsın.
<?php $degerler=''; $Deger1='[1,4,5,3]'; $Deger2='[1,8,8,1]'; $Deger3='[2,0,1,7]'; $Deger4='[1,4,5,3]'; $Deger5='[1,8,8,1]'; $Deger6='[2,0,1,7]'; $Deger7='[1,4,5,3]'; $Deger8='[1,4,5,3]'; $Deger9='[2,0,1,7]'; $degerler.=$Deger1; $degerler.=';'.$Deger2; $degerler.=';'.$Deger3; $degerler.=';'.$Deger4; $degerler.=';'.$Deger5; $degerler.=';'.$Deger6; $degerler.=';'.$Deger7; $degerler.=';'.$Deger8; $degerler.=';'.$Deger9; $dizimiz = explode(';',$degerler); var_dump($dizimiz); ?>
-
StruggleR , Hocam örnek kod o 3 Boyutlu dizim var . Kendi içerisinde Shell Short kullandım bulduğum algoritmayı 3 boyutlu dizimde uygulayacağım. Verilerin içinde String ifadeler var char değil
-
http://stackoverflow.com/a/26192975/7216036 <-- Şu biraz hızlandırdı daha iyi çözüm arıyorum şuan
-
Arrayın md5ini alıp karsılastırabilirsin
-
MhmdAlmz bunu yazdı
StruggleR , Hocam örnek kod o 3 Boyutlu dizim var . Kendi içerisinde Shell Short kullandım bulduğum algoritmayı 3 boyutlu dizimde uygulayacağım. Verilerin içinde String ifadeler var char değil
Tamam tamam hocam ben anladım seni. array_uniqe gibi bir şeyin mantığını anlayarak mükerrir kayıtların yer olmadığı çok boyutlu dizi oluşturmak istiyorsun.
O zaman anlaşılabilir bir şekilde basit ve sade olarak yazdığım şu kodlar senin işini görür.
<?php class sinif { public $Dizimiz= Array(); function ekle($gelen) { if(!in_array($gelen,$this->Dizimiz)) //gelen değer dizide yoksa $this->Dizimiz[] = $gelen; //sınıfın içindeki diziye ekleme yap } } $Dizimiz=Array(); $Deger1=[1,4,5,3]; $Deger2=[1,8,8,1]; $Deger3=[2,0,1,7]; $Deger4=[1,4,5,3]; $Deger5=[1,8,8,1]; $Deger6=[2,0,1,7]; $Deger7=[1,4,5,3]; $Deger8=[1,4,5,3]; $Deger9=[2,0,1,7]; $nesne = new sinif(); $nesne->ekle($Deger1); // veya $nesne->ekle([1,4,5,3]); şeklinde ekleme yapabilirsin $nesne->ekle($Deger2); $nesne->ekle($Deger3); $nesne->ekle($Deger4); $nesne->ekle($Deger5); $Dizimiz=$nesne->Dizimiz; print_r($Dizimiz); ?>
-
Her dizi elemaninin hashini al diyenler hakli. Cok baba sayida veri yoksa sql sunucunun unique yeteneğinden de yararlanabilirsin.
-
Ben yazdım algoritmamı şuan yaklaşık 80x102x1.728 Datayı 19.32 Dakikada hallettim..
https://gist.github.com/mcaskill/baaee44487653e1afc0d
Şurdan yararlandım