Artikel ini dapat digunakan, disalin, dan disebarluaskan. Cukup cantumkan sumber asli. Jika isinya mengandung kebenaran, semoga memberi kebaikan bagi kita yang memanfaatkannya. Jika ada yang salah, mohon kiranya penulis dimaafkan. Dan sangat baik, jika kesalahan tersebut dapat diberitahukan kepada penulis.
Yanmarshus, 15 Maret 2006, yan[at]daunsalam[dot]net

Mengurutkan String Berdasarkan Panjangnya

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);

?>