[英]How do I sort a multidimensional array with stdClass Objects by values of a key?
是的,我已經搜索並嘗試了許多技術,但似乎沒有任何工作。 這是我的數組:
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
)
)
我基本上想要通過名稱鍵對它進行排序,但我在Stackoverflow上嘗試的每個函數似乎都不起作用,因為我得到一個沒有錯誤的空白頁面。
我試過這個:
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');
但那沒用。
有任何想法嗎?
你幾乎是對的,但$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
)
)
usort($array, function($a, $b) {
return strcmp($a->name, $b->name);
});
你應該使用usort ...
因此,您定義一個比較兩個對象的函數(通過名稱字段),然后在數組上運行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);
希望有所幫助!
本
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.