How to sort complex data?

I have this code which generates the following html:



function newsletteredition_dropdown()
{
    $currented = $_COOKIE['spmc_newslettered'];
	
    $current_year = date('Y');
    $edarray = array();

    $posts = get_posts(
        array(
            'post_type'  => 'post',
            'numberposts' => -1
        )
    );

    $out = '<select onchange="setEdCook();" id="newsletteredition_select" name="ne">';
    foreach($posts as $p)
    {
	$posti = &get_post($p->ID);
	$postyear = get_the_time('Y',$p->ID)." - ";
	// get post type by post
	$post_type = $posti->post_type;
	$terms = get_the_terms( $posti->ID, 'edition');
	if ( !empty( $terms ) ) {
			foreach ( $terms as $term )
				if(strlen($term->name)>4){
				$edarray[$term->term_id] = $postyear.$term->name;
				}
		}
	//}
    }

    natcasesort($edarray);
    //array_reverse($edarray, true);
    $edarray = array_reverse($edarray,true);
    $i = 0;
    foreach($edarray as $edvalue => $edlabel){
           if($i==0){
               if($currented==''){
                      $_SESSION["currentedcook"] = $edvalue;
                      $selected = " selected";
                      $_SESSION["currentedlabel"] = $edlabel;
                 }
          }
          elseif($edvalue==$currented){
                    $selected = " selected";
                    $_SESSION["currentedlabel"] = $edlabel;
          }
         else{
                    $selected = "";
          }
         $out .= '<option value="'.$edvalue.'"'.$selected.'>'.substr($edlabel,7).' ('.substr($edlabel,0,4).')</option>';
          $i++;
    }
    $out .= '</select>';
    return $out;
}




<select onchange="setEdCook();" id="newsletteredition_select" name="ne">
<option value="156" selected>Term 2 – Week 4 (2013)</option>
<option value="154">Term 2 – Week 2 (2013)</option>
<option value="157">Term 2 - Week 6 (2013)</option>
<option value="136">Term 1 – Week 10 (2013)</option>
<option value="135">Term 1 – Week 8 (2013)</option>
<option value="134">Term 1 – Week 6 (2013)</option>
<option value="133">Term 1 – Week 4 (2013)</option>
<option value="132">Term 1 – Week 2 (2013)</option>
<option value="129">Term 4 – Week 8 (2012)</option>
<option value="128">Term 4 – Week 6 (2012)</option>
<option value="127">Term 4 – Week 4 (2012)</option>
<option value="126">Term 4 – Week 2 (2012)</option>
<option value="125">Term 3 – Week 10 (2012)</option>
<option value="124">Term 3 – Week 8 (2012)</option>
<option value="123">Term 3 – Week 6 (2012)</option>
<option value="121">Term 3 – Week 4 (2012)</option>
<option value="120">Term 3 – Week 2 (2012)</option>
</select>		

What I want to do is make ‘Term 2 - Week 6 (2013)’ on top of the list. Can someone show me how to archieve that?

Hi,

Using [fphp]krsort[/fphp] should get you what you want:

krsort($edarray);

It sorts the array by key in descending order, which would give you:


Term 2 - Week 6 (2013)
Term 2 – Week 4 (2013)
Term 2 – Week 2 (2013)
Term 1 – Week 10 (2013)
Term 1 – Week 8 (2013)
Term 1 – Week 6 (2013)
Term 1 – Week 4 (2013)
Term 1 – Week 2 (2013)
Term 4 – Week 8 (2012)
Term 4 – Week 6 (2012)
Term 4 – Week 4 (2012)
Term 4 – Week 2 (2012)
Term 3 – Week 10 (2012)
Term 3 – Week 8 (2012)
Term 3 – Week 6 (2012)
Term 3 – Week 4 (2012)
Term 3 – Week 2 (2012)