Как отсортировать многомерный массив с объектами 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 ) ) 

Я в основном хочу отсортировать это по ключу, но каждая функция, которую я пытался использовать в 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); 

Надеюсь, это поможет!

Бен