up vote 0 down vote favorite
share [g+] share [fb]

I have array structure like below,

Array
(
    [0] => stdClass Object
    (
            [ID] => 277
            [post_author] => 1
            [post_date] => 2011-09-02 08:34:03
            [post_date_gmt] => 2011-09-02 08:34:03
            [post_content] => <div class="sol_topcont">
            [menu_order] => 103
            [post_type] => page
            [post_mime_type] => 
            [comment_count] => 0
            [filter] => raw
    )

    [1] => stdClass Object
    (
            [ID] => 275
            [post_author] => 1
            [post_date] => 2011-09-02 08:32:36
            [post_date_gmt] => 2011-09-02 08:32:36
            [post_content] => <div class="sol_topcont1">
            [menu_order] => 100
            [post_type] => page
            [post_mime_type] => 
            [comment_count] => 0
            [filter] => raw
    )

    [2] => stdClass Object
    (
            [ID] => 280
            [post_author] => 1
            [post_date] => 2011-09-02 08:35:24
            [post_date_gmt] => 2011-09-02 08:35:24
            [post_content] => <div class="sol_topcont">
            [menu_order] => 102
            [post_type] => page
            [post_mime_type] => 
            [comment_count] => 0
            [filter] => raw
    )

    [3] => stdClass Object
    (
            [ID] => 282
            [post_author] => 1
            [post_date] => 2011-09-02 08:36:31
            [post_date_gmt] => 2011-09-02 08:36:31
            [post_content] => <div class="sol_topcont">
            [menu_order] => 101
            [post_type] => page
            [post_mime_type] => 
            [comment_count] => 0
            [filter] => raw
    )

)

i nedd to sort this array using ['menu_order'] key value. how to i convert the above array into like the below

Array
(

    [100] => stdClass Object
    (
        [ID] => 275
        [post_author] => 1
        [post_date] => 2011-09-02 08:32:36
        [post_date_gmt] => 2011-09-02 08:32:36
        [post_content] => <div class="sol_topcont1">
        [menu_order] => 100
        [post_type] => page
        [post_mime_type] => 
        [comment_count] => 0
        [filter] => raw
    )



    [101] => stdClass Object
    (
        [ID] => 282
        [post_author] => 1
        [post_date] => 2011-09-02 08:36:31
        [post_date_gmt] => 2011-09-02 08:36:31
        [post_content] => <div class="sol_topcont">
                    [menu_order] => 101
        [post_type] => page
        [post_mime_type] => 
        [comment_count] => 0
        [filter] => raw
    )
    [102] => stdClass Object
    (
        [ID] => 280
        [post_author] => 1
        [post_date] => 2011-09-02 08:35:24
        [post_date_gmt] => 2011-09-02 08:35:24
        [post_content] => <div class="sol_topcont">
                    [menu_order] => 102
        [post_type] => page
        [post_mime_type] => 
        [comment_count] => 0
        [filter] => raw
    )

    [103] => stdClass Object
    (
        [ID] => 277
        [post_author] => 1
        [post_date] => 2011-09-02 08:34:03
        [post_date_gmt] => 2011-09-02 08:34:03
        [post_content] => <div class="sol_topcont">
                    [menu_order] => 103
        [post_type] => page
        [post_mime_type] => 
        [comment_count] => 0
        [filter] => raw
    )
)
link|improve this question

possible duplicate of Sorting an array of an array of objects in PHP by key value – OZ_ Sep 15 '11 at 5:39
feedback

4 Answers

Also you can try this:

$arr = array(
            array('menu_order' => 103, 'id' => 227),
            array('menu_order' => 101, 'id' => 221),
            array('menu_order' => 95, 'id' => 222),
            array('menu_order' => 105, 'id' => 223),
            array('menu_order' => 97, 'id' => 228),
            array('menu_order' => 99, 'id' => 229));

function cmpObj($obj1, $obj2)
{
    return $obj1->menu_order > $obj2->menu_order;
}

uasort($arr, 'cmpObj');

print_r($arr);

Demo

link|improve this answer
feedback

PHP has a usort function you can pass a custom comparator into. You will need to make a function that has two arguments (in this instance two of your objects), compare them, and return -1, 0 or 1 depending on the comparison.

http://www.php.net/manual/en/function.usort.php

Example

function cmp($a, $b) {
    if ($a->menu_order == $b->menu_order) {
        return 0;
    }
    return ($a->menu_order < $b->menu_order) ? -1 : 1;
}

usort($your_array, 'cmp');
link|improve this answer
feedback
up vote 0 down vote accepted

I got an Answer

    foreach($whyapptivo_sub_pages as $pages)
    {
            $key = $pages->menu_order;
            $final[$key] = $pages;
            ksort($final);
        }
   foreach($final as $page)
    {
             ........
          }
link|improve this answer
That will work as long as you can guarantee there will be no two elements with the same menu_order. If there is earlier ones will be overwritten by later ones in your loop. See my solution above for the safest way to do this. – phindmarsh Sep 15 '11 at 5:26
feedback
  1. create a new empty array.
  2. traverse your original array in a loop.
  3. retreive menu_order key for current element in loop.
  4. store the current element in the new array with menu_order as key.
  5. after the loop,destroy original array.

Something like :

<?php

$newArray = array();
foreach($oldArray as $element)
{
    $menuKey = (string) $element->menu_order;
    $newArray[$menuKey] = $element;
}

$oldArray = null;
 // $newArray now has required data 

?>

}

link|improve this answer
i got an answer...please see my answer...thanks for your answer – Ravichandran Sep 15 '11 at 5:20
feedback

Your Answer

 
or
required, but never shown

Not the answer you're looking for? Browse other questions tagged or ask your own question.