Да, я искал и пробовал много методов, но ничего не работает. Вот мой массив:
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);
Надеюсь, это поможет!
Бен