2015-07-21 162 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; 
});