• 15-08-2008, 18:35:56
    #1
    Bir arrayım var, bunu key lerin harf sayısına göre büyükten-küçüğe doğru nasıl sıralarım ?

    arrayım şu ise

    $kelime_arr = array(
    	'phpBB'		=> array(
    		'url'	=> 'www.phpbbturkiye.net',
    		'title'	=> 'phpBB Türkiye',
    	),
    	'phpBB3'	=> array(
    		'url'	=> 'www.phpbbturkiye.net',
    		'title'	=> 'phpBB Türkiye',
    	),
    	'phpBB 3.0.2'	=> array(
    		'url'	=> 'www.phpbbturkiye.net',
    		'title'	=> 'phpBB Türkiye',
    	),
    );
    bunu şu hale sort edecek:

    $kelime_arr = array(
    	'phpBB 3.0.2'	=> array(
    		'url'	=> 'www.phpbbturkiye.net',
    		'title'	=> 'phpBB Türkiye',
    	),
    	'phpBB3'	=> array(
    		'url'	=> 'www.phpbbturkiye.net',
    		'title'	=> 'phpBB Türkiye',
    	),
    	'phpBB'		=> array(
    		'url'	=> 'www.phpbbturkiye.net',
    		'title'	=> 'phpBB Türkiye',
    	),
    );
  • 15-08-2008, 21:17:45
    #2
    yanlış hatırlamıyorsam arsort ile yapıyorduk.
    <?php
    $kelime_arr = array(
        'phpBB'        => array(
            'url'    => 'www.phpbbturkiye.net',
            'title'    => 'phpBB Türkiye',
        ),
        'phpBB3'    => array(
            'url'    => 'www.phpbbturkiye.net',
            'title'    => 'phpBB Türkiye',
        ),
        'phpBB 3.0.2'    => array(
            'url'    => 'www.phpbbturkiye.net',
            'title'    => 'phpBB Türkiye',
        ),
    ); 
    arsort($kelime_arr);
    echo "<pre>";
    print_r($kelime_arr);
    echo "</pre>";
    ?>
  • 15-08-2008, 21:51:05
    #3
    key lerin harf sayısını hesaplayıp büyükten küçüğe sıralayan bir sort bulamadığım için sordum. keyleri lenght e göre sıralayacak, harf sayısı veya bayt büyüklüğü de olabilir.
  • 15-08-2008, 22:49:29
    #4
    Şöyle ilk aklıma gelenleri yazdım. Key leri harf sayılarına göre sıralıyor...

    $kelime_arr = array(
        'phpBB'        => array(
            'url'    => 'www.phpbbturkiye.net',
            'title'    => 'phpBB Türkiye',
        ),
        'phpBB3'    => array(
            'url'    => 'www.phpbbturkiye.net',
            'title'    => 'phpBB Türkiye',
        ),
        'phpBB 3.0.2'    => array(
            'url'    => 'www.phpbbturkiye.net',
            'title'    => 'phpBB Türkiye',
        ),
    );
    
    
    
    $yeni_arr = array_keys($kelime_arr);
    
    foreach($yeni_arr as $key => $val){
      $val_len = strlen($val);
      $temp_arr[$key] = $val_len.".".$key;
    }
    
    arsort($temp_arr);
    
    foreach($temp_arr as $key => $val){
      $s = explode(".", $val);
      $son_arr[$key] = $kelime_arr[$yeni_arr[$s[1]]];
    }
    print_r($son_arr);
  • 16-08-2008, 00:04:06
    #5
    Sağolun ama sıralamanın bana bir yararı olmayacağını anladım yapmak için uğraştığım olayda...

    Linkleri reklam yapmak için uğraşıyordum ama benzer kelimelerde tökezledi, linklerin içindekileri de tekrar değerlendirmöeye alıp, karıştı...


    Yapmak istediğim, mesela, aşağıdaki örnekte, ilk önce "phpBB 3.0.2" ü linklesin, sonra "phpBB" yi linklesin.

    <?php
    
    header('Content-Type: text/html; charset=UTF-8');
    
    $text = 'phpBB, 2000 yılında yayınlanan ilk phpBB3 deneme sürümünden itibaren... 
    Yazılımın son sürümü olan phpBB 3.0 "Olympus"... Aynı zamanda phpBB 3.0.2 da...';
    
    
    $kelime_arr = array(
        'phpBB 3.0'    => array(
            'url'    => 'www.phpbbturkiye.net',
            'title'    => 'phpBB Türkiye',
        ),
        'phpBB3'    => array(
            'url'    => 'www.phpbbturkiye.net',
            'title'    => 'phpBB Türkiye',
        ),
        'phpBB 3.0.2'    => array(
            'url'    => 'www.phpbbturkiye.net',
            'title'    => 'phpBB Türkiye',
        ),
        'phpBB'        => array(
            'url'    => 'www.phpbbturkiye.net',
            'title'    => 'phpBB Türkiye',
        ),
    );
    
    //print_z($kelime_arr);
    
    
    function reklam_yap($text)
    {
        global $kelime_arr;
    
        foreach ($kelime_arr as $key => $value)
        {
            $word = $key;
            $url = $kelime_arr[$key]['url'];
            $title = $kelime_arr[$key]['title'];
            $text = str_ireplace($key, '<a href="http://'.$url.'" title="'.$title.'">'.$key.'</a>', $text);
        }
        return $text;
    }
    
    echo reklam_yap($text);
    
    
    // DEBUG
    function print_z($var)
    {
        echo '<pre>';
        print_r($var);
        echo '</pre>';
    }
    
    ?>
  • 16-08-2008, 00:40:18
    #6
    Yapmak istediğin şey pekde doğru bişey değil. Çünkü program "phpBB" gördüğü an $kelime_arr dizisinin ilk elemanı gibi davranıcak. Yani phpBB 3.0.2 kelimesini görse bile ilk once phpBB yi gördüğü için ona arrayin ilk elemanı gibi davranıcak... İlk önde phpBB yi gördüğü için hiç bir zaman phpBB 3.0.2 a link veremiyceksin ...
    Bunun için bbirsey aklıma gelmedi şu an ama gelirse yazarım buraya