Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
185 views
in Technique[技术] by (71.8m points)

php - Is there a better way to filter an associative array?

Trying to sort my array to show the group with meat categoryName to be first element in array. Is there a better way to sort this array than running two for loops? My array looks like this

Array
(
    [0] => Array
        (

            [categoryId] => C4ye95zr403cx9wqi11eo
            [categoryName] => set
            [categoryStatus] => true
        )

    [1] => Array
        (

            [categoryId] => Cj-v2b7szu3jpph1rvu03
            [categoryName] => meat
            [categoryStatus] => true
        )

I want to rearrange the array by categoryName == meat to be first element in array.

Currently i'm just running two loops to do this.

$temp = array();
foreach($array as $k => $v)
            {
                if($v['categoryName']=="meat")
                {
                    $temp[]     = $menu[$k];
                    $setEmpty   = false;
                    unset($array[$k]);
                }
            }
            foreach($menu as $k=>$v)
            {
                $temp[] = $array[$k];
            }
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You can utilize usort:

usort($array, function ($element) {
    return $element['categoryName'] === 'meat' ? 0 : 1;
});

The documentation states the following about the callback:

The comparison function must return an integer less than, equal to, or greater than zero if the first argument is considered to be respectively less than, equal to, or greater than the second.

So, in order to push the meat category to the beginning, all you need to do is say that everything else is greater than it.

You can check the fiddle for a test.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...