按输入值排序php数组

时间:2015-07-21 11:07:23

标签: php arrays

我有一个数组:

[photos] => Array
(
      [0] => stdClass Object
        (
          [id] => 14
          [name] => image1.jpg
        )
      [1] => stdClass Object
        (
          [id] => 24
          [name] => image2.gif
        )
)

我想将ID = 24的元素移到数组的顶部(第一个)。

例如:

function mysort(24) {
...
}

得到输出:

[photos] => Array
(
     [1] => stdClass Object
        (
              [id] => 24
              [name] => image2.gif
        )          
     [0] => stdClass Object
        (
              [id] => 14
              [name] => image1.jpg
        )
)    

6 个答案:

答案 0 :(得分:1)

非常简单。未经测试但应该工作。我假设您只想将一个元素移到顶部。

function mysort($array, $putOnTopId) {
    $returnArray = array();

    foreach ($array as $item) {
        if ($item->id == $putOnTopId) {
            array_unshift($returnArray, $item); // Put on top
        } else {
            array_push($returnArray, $item); // Put on bottom
        }
    }

    return $returnArray;
}

答案 1 :(得分:0)

我希望这对你有用。

    function mysort(placedTOFirst)
    {
         $tempArray = array();
        $sortedarray = array()
        foreach($photosArray as $key=>$val)
        {
            if($val->id == placedTOFirst)
            {
              $sortedarray[] = $val;
            }
            else
           {
              $tempArray[] = $val;
            }
     }
     $sortedarray = array_merge($sortedarray,$tempArray);
     return $sortedarray;
}

答案 2 :(得分:0)

我明白你想要什么,但你展示的输出并没有改变任何东西。 array [0]仍然包含id:14,而array [1]仍然包含id:24 ...

如果你想将数组[1]的内容放到数组[0]并自动将数组[0]的内容翻译成数组[1],你可以查看这个链接谁显示了一些可以帮助你的PHP函数按预期对数组进行排序。 http://www.w3schools.com/php/php_ref_array.asp

答案 3 :(得分:0)

您可以使用array_multisort(PHP 4,PHP 5)和array_map(PHP 4> = 4.0.6,PHP 5)

array_multisort( array_map(function($_){return $_->id;},$array["photos"]), SORT_DESC, $array["photos"]);

如果您有 PHP 5> = 5.5.0 ,请使用array_column,此处json_encodejson_decode用于转换stdClassarray,所以我个人更喜欢使用array_map的第一个解决方案。

array_multisort( array_column(json_decode(json_encode($array["photos"]), true),"id"), SORT_DESC, $array["photos"]);

<强>测试

[akshay@localhost tmp]$ cat test.php 
<?php

$array = array("photos" => array( (object)array("id" => 14,"name" => "image1.jpg"),(object)array("id"=>24,"name"=>"image2.gif") ) );

print_r($array);

array_multisort( array_map(function($_){return $_->id;},$array["photos"]), SORT_DESC, $array["photos"]);

print_r($array);


?>

<强>输出

[akshay@localhost tmp]$ php test.php 
Array
(
    [photos] => Array
        (
            [0] => stdClass Object
                (
                    [id] => 14
                    [name] => image1.jpg
                )

            [1] => stdClass Object
                (
                    [id] => 24
                    [name] => image2.gif
                )

        )

)
Array
(
    [photos] => Array
        (
            [0] => stdClass Object
                (
                    [id] => 24
                    [name] => image2.gif
                )

            [1] => stdClass Object
                (
                    [id] => 14
                    [name] => image1.jpg
                )

        )

)

答案 4 :(得分:0)

function mysort($id)
{
    $array = array(
                'photos' => array(
                            '1' => array(
                                     'id' => 24,
                                     'name' => 'image2.gif'
                                ),         
                            '0' => array(
                                     'id' => 14,
                                     'name' => 'image1.jpg'
                               ),
                            '2' => array(
                                     'id' => 4,
                                     'name' => 'image2.gif'
                                ),         
                            '3' => array(
                                     'id' => 34,
                                     'name' => 'image1.jpg'
                               ),
                            '4' => array(
                                     'id' => 44,
                                     'name' => 'image2.gif'
                                ),         
                            '5' => array(
                                     'id' => 54,
                                     'name' => 'image1.jpg'
                               )
                )    
            );

    foreach ($array as $key => $value) {        
        foreach ($value as $k => $v) {
            if ($v['id'] === $id) {
                $temp = $array[$key][$k];
                unset($array[$key][$k]);
                array_unshift($array[$key], $temp);
            }
        }
    }
    echo '<pre>';
    print_r($array);
}

mysort(54);

答案 5 :(得分:0)

不是使用任何函数,而是简单地使用PHP的内置函数uasort作为

uasort($array['photos'], function($a,$b){
    return $b->id - $a->id;
});