<?php
$dados =
[
'dados-0'=> [
'valor-0' => 300, 'date-0' => '26/2/2019'
],
'dados-1'=> [
'valor-1' => 150, 'date-1' => '26/2/2019'
],
'dados-2'=> [
'valor-2' => 150, 'date-2' => '26/3/2019'
],
'dados-3'=> [
'valor-3' => 5000, 'date-3' => '9/3/2019'
],
'dados-4'=> [
'valor-4' => 300, 'date-4' => '10/3/2019'
]
];
// função que aplica uma função passada por parâmetro em todos os elementos do array
function array_map_recursive
(callable
$func, array $array){ $res = [];
foreach ($array as $k => $v)
$res[$k] = is_array($v) ? array_map_recursive
($func, $v) : $func(trim($v)); return $res;
}
// função que recupera a primeira data encontrada em um array
function getDataInArray
(array $array){ foreach($array as $val){
if(is_array($val)) return getDataInArray
($array); if(preg_match('/\d{2,4}\-\d{1,2}\-\d{1,2}(?=$)/', $val)) return $val; }
return false;
}
// altera o array para ser ordenado ( formato será por exemplo 2015-02-30 )
$new = array_map_recursive(function($v){
// identifica se é uma data. Se for uma data retorna uma nova data com o formato americano.
}, $dados);
// ordena o array preservando as chaves
return strcmp(getDataInArray
($a), getDataInArray
($b)); });
// altera o array para ser usado ( formato será por exemplo 30/02/2015 )
$dados = array_map_recursive(function($v){
// identifica se é uma data. Se for uma data retorna uma nova data com o formato brasileiro.
}, $new);
// exibe
PD9waHAKCgkJJGRhZG9zID0gCgkJCVsKCQkJCSdkYWRvcy0wJz0+IFsKCQkJCQkndmFsb3ItMCcgPT4gMzAwLCAnZGF0ZS0wJyA9PiAnMjYvMi8yMDE5JwoJCQkJXSwKCQkJCSdkYWRvcy0xJz0+IFsKCQkJCQkndmFsb3ItMScgPT4gMTUwLCAnZGF0ZS0xJyA9PiAnMjYvMi8yMDE5JwoJCQkJXSwKCQkJCSdkYWRvcy0yJz0+IFsKCQkJCQkndmFsb3ItMicgPT4gMTUwLCAnZGF0ZS0yJyA9PiAnMjYvMy8yMDE5JwoJCQkJXSwKCQkJCSdkYWRvcy0zJz0+IFsKCQkJCQkndmFsb3ItMycgPT4gNTAwMCwgJ2RhdGUtMycgPT4gJzkvMy8yMDE5JwoJCQkJXSwKCQkJCSdkYWRvcy00Jz0+IFsKCQkJCQkndmFsb3ItNCcgPT4gMzAwLCAnZGF0ZS00JyA9PiAnMTAvMy8yMDE5JwoJCQkJXQoJCQldOwoKCQkKCQkvLyBmdW7Dp8OjbyBxdWUgYXBsaWNhIHVtYSBmdW7Dp8OjbyBwYXNzYWRhIHBvciBwYXLDom1ldHJvIGVtIHRvZG9zIG9zIGVsZW1lbnRvcyBkbyBhcnJheQoJCWZ1bmN0aW9uIGFycmF5X21hcF9yZWN1cnNpdmUoY2FsbGFibGUgJGZ1bmMsIGFycmF5ICRhcnJheSl7CgkJCSRyZXMgPSBbXTsKCQkJZm9yZWFjaCAoJGFycmF5IGFzICRrID0+ICR2KQoJCQkJJHJlc1ska10gPSBpc19hcnJheSgkdikgPyBhcnJheV9tYXBfcmVjdXJzaXZlKCRmdW5jLCAkdikgOiAkZnVuYyh0cmltKCR2KSk7CgkJCXJldHVybiAkcmVzOwoJCX0KCQkKCQkvLyBmdW7Dp8OjbyBxdWUgcmVjdXBlcmEgYSBwcmltZWlyYSBkYXRhIGVuY29udHJhZGEgZW0gdW0gYXJyYXkKCQlmdW5jdGlvbiBnZXREYXRhSW5BcnJheShhcnJheSAkYXJyYXkpewoJCQlmb3JlYWNoKCRhcnJheSBhcyAkdmFsKXsKCQkJCWlmKGlzX2FycmF5KCR2YWwpKSByZXR1cm4gZ2V0RGF0YUluQXJyYXkoJGFycmF5KTsKCQkJCWlmKHByZWdfbWF0Y2goJy9cZHsyLDR9XC1cZHsxLDJ9XC1cZHsxLDJ9KD89JCkvJywgJHZhbCkpIHJldHVybiAkdmFsOwoJCQl9CgkJCXJldHVybiBmYWxzZTsKCQl9CgkJCgkJLy8gYWx0ZXJhIG8gYXJyYXkgcGFyYSBzZXIgb3JkZW5hZG8gKCBmb3JtYXRvIHNlcsOhIHBvciBleGVtcGxvIDIwMTUtMDItMzAgKQoJCSRuZXcgPSBhcnJheV9tYXBfcmVjdXJzaXZlKGZ1bmN0aW9uKCR2KXsKCQkJLy8gaWRlbnRpZmljYSBzZSDDqSB1bWEgZGF0YS4gU2UgZm9yIHVtYSBkYXRhIHJldG9ybmEgdW1hIG5vdmEgZGF0YSBjb20gbyBmb3JtYXRvIGFtZXJpY2Fuby4KCQkJcmV0dXJuIHByZWdfbWF0Y2goJy9cZHsxLDJ9XC9cZHsxLDJ9XC9cZHsyLDR9KD89JCkvJywgJHYpID8gZGF0ZSgiWS1tLWQiLCBzdHJ0b3RpbWUoc3RyX3JlcGxhY2UoIi8iLCAiLSIsICR2KSkpIDogJHY7CgkJfSwgJGRhZG9zKTsKCgkJLy8gb3JkZW5hIG8gYXJyYXkgcHJlc2VydmFuZG8gYXMgY2hhdmVzCgkJdWFzb3J0KCRuZXcsIGZ1bmN0aW9uKCRhLCRiKXsKCQkJcmV0dXJuIHN0cmNtcChnZXREYXRhSW5BcnJheSgkYSksIGdldERhdGFJbkFycmF5KCRiKSk7CgkJfSk7CgkJCgkJLy8gYWx0ZXJhIG8gYXJyYXkgcGFyYSBzZXIgdXNhZG8gKCBmb3JtYXRvIHNlcsOhIHBvciBleGVtcGxvIDMwLzAyLzIwMTUgKQoJCSRkYWRvcyA9IGFycmF5X21hcF9yZWN1cnNpdmUoZnVuY3Rpb24oJHYpewoJCQkvLyBpZGVudGlmaWNhIHNlIMOpIHVtYSBkYXRhLiBTZSBmb3IgdW1hIGRhdGEgcmV0b3JuYSB1bWEgbm92YSBkYXRhIGNvbSBvIGZvcm1hdG8gYnJhc2lsZWlyby4KCQkJcmV0dXJuIHByZWdfbWF0Y2goJy9cZHsyLDR9XC1cZHsxLDJ9XC1cZHsxLDJ9KD89JCkvJywgJHYpID8gZGF0ZSgiZC9tL1kiLCBzdHJ0b3RpbWUoc3RyX3JlcGxhY2UoIi8iLCAiLSIsICR2KSkpIDogJHY7CgkJfSwgJG5ldyk7CgoJCS8vIGV4aWJlCgkJcHJpbnRfcigkZGFkb3MpOw==