2012-09-24 68 views
4

我試圖做一些功能,會發現(在下面的數組中)的id爲2的對象,並將其移動到數組的頂部。這裏的原始數組:多維數組,找到物品並移動到頂部?

Array 
(
    [0] => stdClass Object 
     (
      [id] => 177 
      [startdate] => 2014-08-02 
     ) 

    [1] => stdClass Object 
     (
      [id] => 178 
      [startdate] => 2014-08-02 
     ) 

    [2] => stdClass Object 
     (
      [id] => 2 
      [startdate] => 2014-07-28 
     ) 

    [3] => stdClass Object 
     (
      [id] => 82 
      [startdate] => 2014-07-28 

     ) 

    [4] => stdClass Object 
     (
      [id] => 199 
      [startdate] => 2013-10-10 
     ) 
) 

這裏是什麼我也想輸出(與移動數組項):

Array 
(

    [0] => stdClass Object 
     (
      [id] => 2 
      [startdate] => 2014-07-28 
     ) 
    [1] => stdClass Object 
     (
      [id] => 177 
      [startdate] => 2014-08-02 
     ) 

    [2] => stdClass Object 
     (
      [id] => 178 
      [startdate] => 2014-08-02 
     ) 

    [3] => stdClass Object 
     (
      [id] => 82 
      [startdate] => 2014-07-28 

     ) 

    [4] => stdClass Object 
     (
      [id] => 199 
      [startdate] => 2013-10-10 
     ) 
) 

任何幫助,將不勝感激。

+0

我才意識到,數組鍵也是2,我不希望它來移動,我需要它來移動一個是[ID] => 2 .. –

+0

不要在編輯問題評論,把你的編輯放在問題中。你已經嘗試了什麼? –

+0

比較(當不需要查看內部數組時):http://stackoverflow.com/a/27217431/1333493 – Nemo

回答

7
function customShift($array, $id){ 
    foreach($array as $key => $val){  // loop all elements 
     if($val->id == $id){    // check for id $id 
      unset($array[$key]);   // unset the $array with id $id 
      array_unshift($array, $val); // unshift the array with $val to push in the beginning of array 
      return $array;    // return new $array 
     } 
    } 
} 

print_r(customShift($data, 2)); 
+1

當您發現記錄或修復代碼時,從foreach中斷,因此$ out數組可以有多行和多行可以不移位。 –

+1

打破...但ID應該是唯一的:)在我的意見 –

+0

我同意ID應該是唯一的,但你永遠不知道人們正在嘗試做什麼,這就是爲什麼我已提出或建議;-) p.s.您可以使代碼更小2行,刪除$ out變量,並在您設置$ out的位置移動不移位。 –