Вы можете использовать usort()
.
$data = json_decode($json);
usort($data, function($a, $b) {
if ($a->id == $b->id) {
return 0;
}
return $a->id < $b->id ? -1 : 1;
});
Или, если вы используете PHP <5.3, вам нужно определить функцию сравнения, так как поддержка анонимных функций была добавлена в PHP 5.3. </p>
function cmp($a, $b) {
if ($a->id == $b->id) {
return 0;
}
return $a->id < $b->id ? -1 : 1;
}
$data = json_decode($json);
usort($data, 'cmp');
Это отсортировало бы массив. После этого, если вы хотите создать массив только со значениями name
, вы можете сделать это с помощью foreach
.
$result = array();
foreach ($data as $entry) {
$result[] = array('name' => $entry->name);
}
Переменная $result
теперь будет содержать:
array(array('name' => 'aaa'),
array('name' => 'eee'),
array('name' => 'ccc'),
array('name' => 'bbb'),
array('name' => 'ddd'));
Затем, чтобы снова закодировать результат в JSON, вы можете вызвать json_encode()
.
echo json_encode($result);
Будет выведена строка, похожая на:
[{"name": "aaa"},
{"name": "eee"},
{"name": "ccc"},
{"name": "bbb"},
{"name": "ddd"}]