如何根据非常深的键值对数组进行排序

How to sort array based on VERY deep key value

我有这个数组:

array(
(int) 0 => array(
    'Inscricao' => array(
        'id' => '89560',
        'codigo' => null,
        'aluno_id' => '28065',
        'turma_id' => '14377',
        'estado_inscricao_id' => '13',
        'nota_frequencia' => '12.00',
        'nota_final' => '10.75',
        'epoca_avaliacao_id' => null,
        'data' => '2014-02-10',
        'created' => '2015-08-31 07:12:42',
        'modified' => '2015-09-02 01:31:00',
        'matricula_id' => '136247',
        'created_by' => null,
        'modified_by' => null,
        'pagamento_id' => null,
        'tipo_inscricao_id' => '1',
        'nota_exame_normal' => '9.50',
        'nota_exame_recorrencia' => null,
        'estado_inscricao' => '2',
        'turma_inscricao_id' => null,
        'turma_frequencia_id' => '14377'
    ),
    'Turma' => array(
        'id' => '14377',
        'ano_lectivo_id' => '30',
        'curso_id' => '18',
        'plano_estudo_id' => '91',
        'turno_id' => null,
        'disciplina_id' => '394',
        'capacidade_maxima' => null,
        'total_aprovados' => null,
        'media_turma' => null,
        'estado_turma_id' => '1',
        'modified' => '2015-08-31 07:02:54',
        'created' => '2015-08-31 07:02:54',
        'total_reprovados' => null,
        'codigo' => '2011',
        'ano_curricular' => '2',
        'semestre_curricular' => '2',
        'name' => 'Sociologia do Desporto - 2014 - Licenciatura em Ciências do Desporto - 2011',
        'semestre_lectivo_id' => '66',
        'sala_aula_id' => null,
        'sequencia' => null,
        'peso_nota_frequencia' => null,
        'peso_nota_exame' => null,
        'nota_minima_frequencia' => null,
        'nota_minima_dispensa' => null,
        'created_by' => null,
        'modified_by' => null,
        'pauta_path' => null,
        'total_alunos' => '44',
        'AnoLectivo' => array(
            'id' => '30',
            'codigo' => '2014',
            'ano' => '2014',
            'num_semestre' => null,
            'data_inicio' => null,
            'data_fim' => null,
            'created' => '2013-10-08 05:13:51',
            'modified' => '2013-10-08 05:13:51',
            'regime_lectivo_id' => null
        ),
        'Curso' => array(
            'name' => 'Licenciatura em Ciências do Desporto'
        ),
        'Turno' => array(),
        'Disciplina' => array(
            'id' => '394',
            'name' => 'Sociologia do Desporto',
            'codigo' => 'SOD',
            'codigo_antigo' => null,
            'created' => '1432892405',
            'modified' => '1432892405',
            'created_by' => '54193',
            'modified_by' => null,
            'unidade_organica_id' => null
        )
    ),
    'EstadoInscricao' => array(
        'id' => '13',
        'name' => 'Aprovado sem Exames'
    ),
    'Matricula' => array(
        'id' => '136247',
        'codigo' => '',
        'aluno_id' => '28065',
        'curso_id' => '18',
        'plano_estudo_id' => '91',
        'data' => '2013-10-30',
        'estado_matricula_id' => '1',
        'modified' => '2015-08-31 06:55:53',
        'created' => '2013-10-31 12:09:43',
        'user_id' => '1',
        'ano_lectivo_id' => '30',
        'turno_id' => '1',
        'nivel' => null,
        'created_by' => '1',
        'modified_by' => null,
        'tipo_matricula_id' => '2',
        'regime_lectivo_id' => null,
        'financeiro_pagamento_id' => null,
        'Aluno' => array(
            'id' => '28065',
            'codigo' => '20115466',
            'user_id' => '28066',
            'data_ingresso' => '1900-01-01',
            'trabalhador' => null,
            'area_trabalho_id' => null,
            'instituicao_id' => null,
            'curso_id' => '18',
            'created' => '2011-03-02 14:15:30',
            'modified' => '2015-08-31 06:55:52',
            'entidade_id' => '28066',
            'numero_estudante' => '20115466',
            'aluno_via_admissao_id' => '13',
            'numero_candidato' => null,
            'ano_ingresso' => '2011',
            'curso_ingresso_id' => '18',
            'created_by' => null,
            'modified_by' => null,
            'nome_encarregado' => null,
            'parentesco_encarregado' => null,
            'telefone_encarregado' => null,
            'telemovel_encarregado' => null,
            'nome_emergencia' => null,
            'telefone_emergencia' => null,
            'telemovel_emergencia' => null,
            'estado_aluno_id' => '1',
            'plano_estudo_id' => '91',
            'data_conclusao' => null,
            'nota_conclusao' => null,
            'certificado_nivel_anterior' => '1',
            'recenseamento_militar' => '1',
            'referencia_renovacao' => null,
            'Entidade' => array(
                'id' => '28066',
                'name' => 'Elisa Luis  Artur',
                'nome_pai' => 'Luís Artur Vasco',
                'nome_mae' => 'Jacinta António',
                'foto' => '20115466.jpg',
                'genero_id' => '2',
                'pais_nascimento' => '152',
                'cidade_morada' => null,
                'bairro_morada' => null,
                'caixa_postal_morada' => null,
                'cidade_ferias' => null,
                'cidade_nascimento' => '809',
                'provincia_nascimento' => null,
                'email' => '',
                'telefone' => '',
                'telemovel' => '825507722',
                'documento_identificacao_id' => null,
                'documento_identificacao_numero' => null,
                'data_nascimento' => '1988-09-20',
                'documento_identificacao_data_emissao' => null,
                'estado_entidade_id' => null,
                'created' => '2011-03-02 14:15:30',
                'modified' => '2013-09-13 10:31:17',
                'user_id' => '28066',
                'documento_identificacao_local_emissao' => null,
                'apelido' => 'Artur',
                'nomes' => 'Elisa Luis ',
                'created_by' => null,
                'modified_by' => null,
                'provincia_ferias' => null,
                'telefone_ferias' => null,
                'telemovel_ferias' => null,
                'avenida_rua' => null,
                'avenida_rua_ferias' => null,
                'agregado_familiar_numero' => null,
                'estado_civil' => '1',
                'documento_identificacao_data_validade' => null,
                'nacionalidade' => '1',
                'codigo' => '41446',
                'naturalidade' => null,
                'nuit' => null,
                'User' => array(
                    'password' => '*****',
                    'id' => '28066',
                    'username' => 'elisa.artur@uem.ac.mz',
                    'codigocartao' => '20115466',
                    'group_id' => '3',
                    'created_by' => null,
                    'modified_by' => null,
                    'ultimo_login' => null,
                    'codigo_activacao' => '1',
                    'estado_objecto_id' => '1',
                    'verificar_permissoes' => '0',
                    'created' => null,
                    'modified' => null,
                    'estado_email' => '0',
                    'timezone' => null,
                    'facebook_id' => null
                )
            )
        )
    )
),
(int) 1 => array(
    'Inscricao' => array(
        'id' => '92162',
        'codigo' => null,
        'aluno_id' => '28446',
        'turma_id' => '14377',
        'estado_inscricao_id' => '10',
        'nota_frequencia' => '10.00',
        'nota_final' => '9.75',
        'epoca_avaliacao_id' => null,
        'data' => '2014-02-11',
        'created' => '2015-08-31 07:31:54',
        'modified' => '2015-09-02 01:31:00',
        'matricula_id' => '130681',
        'created_by' => null,
        'modified_by' => null,
        'pagamento_id' => null,
        'tipo_inscricao_id' => '1',
        'nota_exame_normal' => '9.50',
        'nota_exame_recorrencia' => null,
        'estado_inscricao' => '2',
        'turma_inscricao_id' => null,
        'turma_frequencia_id' => '14377'
    ),
    'Turma' => array(
        'id' => '14377',
        'ano_lectivo_id' => '30',
        'curso_id' => '18',
        'plano_estudo_id' => '91',
        'turno_id' => null,
        'disciplina_id' => '394',
        'capacidade_maxima' => null,
        'total_aprovados' => null,
        'media_turma' => null,
        'estado_turma_id' => '1',
        'modified' => '2015-08-31 07:02:54',
        'created' => '2015-08-31 07:02:54',
        'total_reprovados' => null,
        'codigo' => '2011',
        'ano_curricular' => '2',
        'semestre_curricular' => '2',
        'name' => 'Sociologia do Desporto - 2014 - Licenciatura em Ciências do Desporto - 2011',
        'semestre_lectivo_id' => '66',
        'sala_aula_id' => null,
        'sequencia' => null,
        'peso_nota_frequencia' => null,
        'peso_nota_exame' => null,
        'nota_minima_frequencia' => null,
        'nota_minima_dispensa' => null,
        'created_by' => null,
        'modified_by' => null,
        'pauta_path' => null,
        'total_alunos' => '44',
        'AnoLectivo' => array(
            'id' => '30',
            'codigo' => '2014',
            'ano' => '2014',
            'num_semestre' => null,
            'data_inicio' => null,
            'data_fim' => null,
            'created' => '2013-10-08 05:13:51',
            'modified' => '2013-10-08 05:13:51',
            'regime_lectivo_id' => null
        ),
        'Curso' => array(
            'name' => 'Licenciatura em Ciências do Desporto'
        ),
        'Turno' => array(),
        'Disciplina' => array(
            'id' => '394',
            'name' => 'Sociologia do Desporto',
            'codigo' => 'SOD',
            'codigo_antigo' => null,
            'created' => '1432892405',
            'modified' => '1432892405',
            'created_by' => '54193',
            'modified_by' => null,
            'unidade_organica_id' => null
        )
    ),
    'EstadoInscricao' => array(
        'id' => '10',
        'name' => 'Reprovado'
    ),
    'Matricula' => array(
        'id' => '130681',
        'codigo' => '',
        'aluno_id' => '28446',
        'curso_id' => '97',
        'plano_estudo_id' => null,
        'data' => '2013-10-17',
        'estado_matricula_id' => '1',
        'modified' => '2014-01-13 10:22:24',
        'created' => '2013-10-17 11:18:10',
        'user_id' => '1',
        'ano_lectivo_id' => '30',
        'turno_id' => '2',
        'nivel' => null,
        'created_by' => '1',
        'modified_by' => null,
        'tipo_matricula_id' => '2',
        'regime_lectivo_id' => null,
        'financeiro_pagamento_id' => null,
        'Aluno' => array(
            'id' => '28446',
            'codigo' => '20116158',
            'user_id' => '28447',
            'data_ingresso' => '1900-01-01',
            'trabalhador' => null,
            'area_trabalho_id' => null,
            'instituicao_id' => null,
            'curso_id' => '97',
            'created' => '2011-03-25 10:07:04',
            'modified' => '2013-06-16 22:17:58',
            'entidade_id' => '28447',
            'numero_estudante' => '20116158',
            'aluno_via_admissao_id' => '13',
            'numero_candidato' => null,
            'ano_ingresso' => '2012',
            'curso_ingresso_id' => '18',
            'created_by' => null,
            'modified_by' => null,
            'nome_encarregado' => null,
            'parentesco_encarregado' => null,
            'telefone_encarregado' => null,
            'telemovel_encarregado' => null,
            'nome_emergencia' => null,
            'telefone_emergencia' => null,
            'telemovel_emergencia' => null,
            'estado_aluno_id' => '1',
            'plano_estudo_id' => null,
            'data_conclusao' => null,
            'nota_conclusao' => null,
            'certificado_nivel_anterior' => '1',
            'recenseamento_militar' => '1',
            'referencia_renovacao' => null,
            'Entidade' => array(
                'id' => '28447',
                'name' => 'Paulo José  Pelembe',
                'nome_pai' => 'Mundau José Pelembe',
                'nome_mae' => 'Rosa Fomo',
                'foto' => '20116158.jpg',
                'genero_id' => '1',
                'pais_nascimento' => '152',
                'cidade_morada' => null,
                'bairro_morada' => null,
                'caixa_postal_morada' => null,
                'cidade_ferias' => null,
                'cidade_nascimento' => '1101',
                'provincia_nascimento' => null,
                'email' => '',
                'telefone' => '',
                'telemovel' => '828352330',
                'documento_identificacao_id' => null,
                'documento_identificacao_numero' => null,
                'data_nascimento' => '1976-12-17',
                'documento_identificacao_data_emissao' => null,
                'estado_entidade_id' => null,
                'created' => '2011-03-25 10:07:03',
                'modified' => '2013-09-13 10:37:47',
                'user_id' => '28447',
                'documento_identificacao_local_emissao' => null,
                'apelido' => 'Pelembe',
                'nomes' => 'Paulo José ',
                'created_by' => null,
                'modified_by' => null,
                'provincia_ferias' => null,
                'telefone_ferias' => null,
                'telemovel_ferias' => null,
                'avenida_rua' => null,
                'avenida_rua_ferias' => null,
                'agregado_familiar_numero' => null,
                'estado_civil' => '1',
                'documento_identificacao_data_validade' => null,
                'nacionalidade' => '1',
                'codigo' => '41832',
                'naturalidade' => null,
                'nuit' => null,
                'User' => array(
                    'password' => '*****',
                    'id' => '28447',
                    'username' => 'paulo.pelembe@uem.ac.mz',
                    'codigocartao' => '20116158',
                    'group_id' => '3',
                    'created_by' => null,
                    'modified_by' => null,
                    'ultimo_login' => null,
                    'codigo_activacao' => '1',
                    'estado_objecto_id' => '1',
                    'verificar_permissoes' => '0',
                    'created' => null,
                    'modified' => null,
                    'estado_email' => '0',
                    'timezone' => null,
                    'facebook_id' => null
                )
            )
        )
    )
),
(int) 2 => array(
    'Inscricao' => array(
        'id' => '92200',
        'codigo' => null,
        'aluno_id' => '28504',
        'turma_id' => '14377',
        'estado_inscricao_id' => '13',
        'nota_frequencia' => '10.00',
        'nota_final' => '10.25',
        'epoca_avaliacao_id' => null,
        'data' => '2014-02-10',
        'created' => '2015-08-31 07:32:17',
        'modified' => '2015-09-02 01:31:00',
        'matricula_id' => '141228',
        'created_by' => null,
        'modified_by' => null,
        'pagamento_id' => null,
        'tipo_inscricao_id' => '1',
        'nota_exame_normal' => '8.50',
        'nota_exame_recorrencia' => '10.50',
        'estado_inscricao' => '2',
        'turma_inscricao_id' => null,
        'turma_frequencia_id' => '14377'
    ),
    'Turma' => array(
        'id' => '14377',
        'ano_lectivo_id' => '30',
        'curso_id' => '18',
        'plano_estudo_id' => '91',
        'turno_id' => null,
        'disciplina_id' => '394',
        'capacidade_maxima' => null,
        'total_aprovados' => null,
        'media_turma' => null,
        'estado_turma_id' => '1',
        'modified' => '2015-08-31 07:02:54',
        'created' => '2015-08-31 07:02:54',
        'total_reprovados' => null,
        'codigo' => '2011',
        'ano_curricular' => '2',
        'semestre_curricular' => '2',
        'name' => 'Sociologia do Desporto - 2014 - Licenciatura em Ciências do Desporto - 2011',
        'semestre_lectivo_id' => '66',
        'sala_aula_id' => null,
        'sequencia' => null,
        'peso_nota_frequencia' => null,
        'peso_nota_exame' => null,
        'nota_minima_frequencia' => null,
        'nota_minima_dispensa' => null,
        'created_by' => null,
        'modified_by' => null,
        'pauta_path' => null,
        'total_alunos' => '44',
        'AnoLectivo' => array(
            'id' => '30',
            'codigo' => '2014',
            'ano' => '2014',
            'num_semestre' => null,
            'data_inicio' => null,
            'data_fim' => null,
            'created' => '2013-10-08 05:13:51',
            'modified' => '2013-10-08 05:13:51',
            'regime_lectivo_id' => null
        ),
        'Curso' => array(
            'name' => 'Licenciatura em Ciências do Desporto'
        ),
        'Turno' => array(),
        'Disciplina' => array(
            'id' => '394',
            'name' => 'Sociologia do Desporto',
            'codigo' => 'SOD',
            'codigo_antigo' => null,
            'created' => '1432892405',
            'modified' => '1432892405',
            'created_by' => '54193',
            'modified_by' => null,
            'unidade_organica_id' => null
        )
    ),
    'EstadoInscricao' => array(
        'id' => '13',
        'name' => 'Aprovado sem Exames'
    ),
    'Matricula' => array(
        'id' => '141228',
        'codigo' => '',
        'aluno_id' => '28504',
        'curso_id' => '18',
        'plano_estudo_id' => '91',
        'data' => '2013-10-31',
        'estado_matricula_id' => '1',
        'modified' => '2015-08-31 06:56:21',
        'created' => '2013-11-01 07:56:44',
        'user_id' => '1',
        'ano_lectivo_id' => '30',
        'turno_id' => '1',
        'nivel' => null,
        'created_by' => '1',
        'modified_by' => null,
        'tipo_matricula_id' => '2',
        'regime_lectivo_id' => null,
        'financeiro_pagamento_id' => null,
        'Aluno' => array(
            'id' => '28504',
            'codigo' => '20116434',
            'user_id' => '28505',
            'data_ingresso' => '1900-01-01',
            'trabalhador' => null,
            'area_trabalho_id' => null,
            'instituicao_id' => null,
            'curso_id' => '18',
            'created' => '2011-03-28 12:12:43',
            'modified' => '2015-08-31 06:56:21',
            'entidade_id' => '28505',
            'numero_estudante' => '20116434',
            'aluno_via_admissao_id' => '13',
            'numero_candidato' => null,
            'ano_ingresso' => '2011',
            'curso_ingresso_id' => '18',
            'created_by' => null,
            'modified_by' => null,
            'nome_encarregado' => null,
            'parentesco_encarregado' => null,
            'telefone_encarregado' => null,
            'telemovel_encarregado' => null,
            'nome_emergencia' => null,
            'telefone_emergencia' => null,
            'telemovel_emergencia' => null,
            'estado_aluno_id' => '1',
            'plano_estudo_id' => '91',
            'data_conclusao' => null,
            'nota_conclusao' => null,
            'certificado_nivel_anterior' => '1',
            'recenseamento_militar' => '1',
            'referencia_renovacao' => null,
            'Entidade' => array(
                'id' => '28505',
                'name' => 'Lina Mário Matola',
                'nome_pai' => 'Mário Augusto Matola',
                'nome_mae' => 'Lina Albino Manjate',
                'foto' => '20116434.jpg',
                'genero_id' => '2',
                'pais_nascimento' => '152',
                'cidade_morada' => null,
                'bairro_morada' => null,
                'caixa_postal_morada' => null,
                'cidade_ferias' => null,
                'cidade_nascimento' => '1101',
                'provincia_nascimento' => null,
                'email' => 'linamario16@yahoo.com.br                     ',
                'telefone' => '',
                'telemovel' => '828322450',
                'documento_identificacao_id' => null,
                'documento_identificacao_numero' => null,
                'data_nascimento' => '1988-04-13',
                'documento_identificacao_data_emissao' => null,
                'estado_entidade_id' => null,
                'created' => '2011-03-28 12:12:42',
                'modified' => '2013-09-13 10:38:41',
                'user_id' => '28505',
                'documento_identificacao_local_emissao' => null,
                'apelido' => 'Matola',
                'nomes' => 'Lina Mário',
                'created_by' => null,
                'modified_by' => null,
                'provincia_ferias' => null,
                'telefone_ferias' => null,
                'telemovel_ferias' => null,
                'avenida_rua' => null,
                'avenida_rua_ferias' => null,
                'agregado_familiar_numero' => null,
                'estado_civil' => '1',
                'documento_identificacao_data_validade' => null,
                'nacionalidade' => '1',
                'codigo' => '41891',
                'naturalidade' => null,
                'nuit' => null,
                'User' => array(
                    'password' => '*****',
                    'id' => '28505',
                    'username' => 'lina.matola@uem.ac.mz',
                    'codigocartao' => '20116434',
                    'group_id' => '3',
                    'created_by' => null,
                    'modified_by' => null,
                    'ultimo_login' => null,
                    'codigo_activacao' => '1',
                    'estado_objecto_id' => '1',
                    'verificar_permissoes' => '0',
                    'created' => null,
                    'modified' => null,
                    'estado_email' => '0',
                    'timezone' => null,
                    'facebook_id' => null
                )
            )
        )
    )
),
(int) 3 => array(

我想根据关键字 "apelido" 对其进行排序。在 PHP 中执行此操作的最佳方法是什么?

注意:关键apelido在[0]['Matricula']['Aluno']['Entidade']['apelido'].

注意 2:这是 CakePHP 使用 Containable 查找的结果。有没有办法让 cake 在查找过程中对它进行排序?

使用Hash::sort(),它接受Hash path syntax格式的路径,允许指定深度嵌套的路径。

$sorted = Hash::sort($data, '{n}.Matricula.Aluno.Entidade.apelido');

更多参数定义排序顺序和排序类型,有关详细信息,请参阅 Cookbook > Core Libraries > Utilities > Hash > Hash::sort()

如果您希望通过查找调用对返回的结果进行排序,您可以在 Model::afterFind() 回调或自定义查找器中修改结果,请参阅