2015-07-21 86 views
-1

我有一个数组:排序PHP数组通过输入值

[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 
     ) 
)  
+0

如果您有一个id => 30,该怎么办? –

+0

到目前为止您尝试过的是什么? –

+0

什么都不做......返回原始数组 – user889349

回答

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; 
} 
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; 
} 
0

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

如果要将array [1]的内容放入array [0]并自动转换内容数组[0]到数组[1],你可以检查这个链接谁显示一些PHP函数谁可以帮助你按预期排序你的数组。 http://www.w3schools.com/php/php_ref_array.asp

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"]); 

测试

[[email protected] 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); 


?> 

输出

[[email protected] 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 
       ) 

     ) 

) 
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); 
0

,而不是使我可以简单的将内置函数PHP的uasort

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