сортировка массива по внутреннему полю массива

У меня есть этот массив,

Array
(
[0] => Array
(
[ID] => 108
[custom] => Array
(
[date_tps] => Array
(
[0] => 14.07.2014
)
)
)

[1] => Array
(
[ID] => 123
[custom] => Array
(
[date_tps] => Array
(
[0] => 22.07.2014
)
)
)

[2] => Array
(
[ID] => 152
[custom] => Array
(
[date_tps] => Array
(
[0] => 23.06.2014
)
)
)

[3] => Array
(
[ID] => 153
[custom] => Array
(
[date_tps] => Array
(
[0] => 06.07.2014
)
)
)
)

и я пытаюсь отсортировать по дате, date_tps[0] поле, от новой даты до старой.
кто-нибудь может подсказать мне, как это сделать?
Я попытался использовать функцию php для сортировки (с $ a- $ b), но она не сработала (я думаю, это потому, что она действительно находится во многих массивах.
большое спасибо!

2

Решение

Да тебе нужно usort() к этому:

Простое препятствие заключается в том, что вам нужно сначала преобразовать времена внутри, прежде чем они будут сопоставимы.

$values = array(
array('ID' => 108, 'custom' => array('date_tps' => array('14.07.2014'))),
array('ID' => 123, 'custom' => array('date_tps' => array('22.07.2014'))),
array('ID' => 152, 'custom' => array('date_tps' => array('23.06.2014'))),
array('ID' => 108, 'custom' => array('date_tps' => array('06.07.2014'))),
);

usort($values, function($a, $b){
$v1 = $a['custom']['date_tps'][0];
$v2 = $b['custom']['date_tps'][0];
$v1 = DateTime::createFromFormat('d.m.Y', $v1); // convert them properly first
$v2 = DateTime::createFromFormat('d.m.Y', $v2);
return $v1->getTimestamp() - $v2->getTimestamp();
// or
return $v1->format('U') - $v2->format('U');
});

echo '<pre>';
print_r($values);

демонстрация

1

Другие решения

Других решений пока нет …