2012-06-13 120 views
4

是的,我搜索並嘗試了很多技術,但似乎沒有任何工作。這裏是我的數組:如何使用鍵值對stdClass對象排列多維數組?

Array 
(
    [0] => stdClass Object 
     (
      [id] => 119 
      [name] => Business3 
      [start_date] => 1338789600 
      [end_date] => 1354604400 
     ) 

    [1] => stdClass Object 
     (
      [id] => 153 
      [name] => Business1 
      [start_date] => 1338962400 
      [end_date] => 1370498400 
     ) 

    [2] => stdClass Object 
     (
      [id] => 135 
      [name] => Business2 
      [start_date] => 1339653600 
      [end_date] => 1356937200 
     ) 
) 

我基本上要通過的名稱鍵排序這一點,但每次我#2試過功能似乎並沒有工作,因爲在,我得到了一個空白頁面,並沒有錯誤。

我嘗試這樣做:

function array_sort_by_column(&$arr, $col, $dir = SORT_ASC) { 
    $sort_col = array(); 
    foreach ($arr as $key=> $row) { 
     $sort_col[$key] = $row[$col]; 
    } 

    array_multisort($sort_col, $dir, $arr); 
} 

array_sort_by_column(json_decode(json_encode($businesses), true), 'name'); 

但沒有奏效。

任何想法?

回答

8

你差不多吧,但$row[$col]試圖訪問類似於數組的對象。您需要改爲$row->{$col}。這裏有一個簡單,工作示例:

$db = array(
    0 => (object) array('name' => 'Business3'), 
    1 => (object) array('name' => 'Business2'), 
    2 => (object) array('name' => 'Business1') 
); 

$col = 'name'; 
$sort = array(); 
foreach ($db as $i => $obj) { 
    $sort[$i] = $obj->{$col}; 
} 

$sorted_db = array_multisort($sort, SORT_ASC, $db); 

print_r($db); 

輸出:

Array 
(
    [0] => stdClass Object 
     (
      [name] => Business1 
     ) 

    [1] => stdClass Object 
     (
      [name] => Business2 
     ) 

    [2] => stdClass Object 
     (
      [name] => Business3 
     ) 

) 
0

您應該使用usort ...

所以你定義比較兩個對象的功能(按name字段),然後在陣列上運行usort,在函數傳遞作爲第二個參數。

事情是這樣的:

function cmp($a, $b) 
{ 
    if ($a["name"] == $b["name"]) { 
     return 0; 
    } 
    return ($a["name"] < $b["name"]) ? -1 : 1; 
} 

usort ($my_array, "cmp"); 
var_dump($my_array); 

希望幫助!

2
usort($array, function($a, $b) { 
    return strcmp($a->name, $b->name); 
});