Tulisan ini berawal dari sebuah posting di mailing-list phpug@yahoogroups.com. Seorang anggota mailing-list bertanya tentang cara untuk mengurutkan string berdasarkan panjang string tersebut. Akhirnya beliau menemukan sendiri solusinya. Hanya saja setelah itu saya merasa ada sebuah gagasan lain, yang saya anggap tak lazim untuk melakukan pengurutan tersebut. Namun bisa jadi sudah ada orang lain yang melakukannya, dan saya tak mengetahuinya. Dan gagasan ini bukanlah gagasan "ilmiah" yang memiliki sekian banyak alasan dan kehebatan. Malah cenderung main-main.
Maksud pengurutan di sini adalah, kita akan mendapatkan hasil string yang urut berdasar panjangnya. Misalnya kita punya data seperti berikut :
kucing, ayam, kelelawar, hiu, kambing, dinosaurus
Hasilnya setelah diurutkan adalah :
hiu ayam kucing kambing kelelawar dinosaurus
Dengan asumsi bahwa data yang akan diurutkan ada dalam sebuah array, maka cara yang saya gunakan untuk ide ini adalah seperti berikut :
Untuk langkah di atas, contoh fungsi berikut dibuat dalam bahasa Php.
<?php function urut_panjang($array) { // nilai ini untuk panjang pad // perlu disesuaikan dengan panjang maksimum // dari data string $pad = 5; // membuat array tmp yang berisi data dari $array // data ditambahkan dengan panjang string bersangkutan $i = 0; $arraytmp = array(); while (list($index,$isi) = each($array)) { $panjang = strlen($isi); $panjang = str_pad($panjang,$pad,"0",STR_PAD_LEFT); $isi = $panjang . $isi; $arraytmp[$i] = $isi; $i++; } // array tmp disort sort($arraytmp); // membuat array baru lagi dari array tmp // data panjang yang sebelumnya ditambahkan // dibuang terlebih dahulu // sehingga kembali seperti data semula $i = 0; $array = array(); while (list($index,$isi) = each($arraytmp)) { $isi = substr($isi,$pad); $array[$i] = $isi; $i++; } return($array); } //////////////////////////// // berikut contoh penggunaan //////////////////////////// $data = array('satu','dua','tiga','empat','lima', 'enam','tujuh','delapan','sembilan','sepuluh'); $hasil = urut_panjang($data); print_r($hasil); ?>