<?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.
			return preg_match('/\d{1,2}\/\d{1,2}\/\d{2,4}(?=$)/', $v) ? date("Y-m-d", strtotime(str_replace("/", "-", $v))) : $v;
		}, $dados);

		// ordena o array preservando as chaves
		uasort($new, function($a,$b){
			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.
			return preg_match('/\d{2,4}\-\d{1,2}\-\d{1,2}(?=$)/', $v) ? date("d/m/Y", strtotime(str_replace("/", "-", $v))) : $v;
		}, $new);

		// exibe
		print_r($dados);