按字母顺序排列数组

时间:2015-01-06 18:47:54

标签: php arrays usort

<?php
$indice_enti = '[{"ripartizione_geografica":"ITALIA NORD-OCCIDENTALE","descrizione_provincia":"Torino","data_ingresso_siope":"2007-01-01T00:00:00Z","codice_sottocomparto":"COMUNE","codice_provincia":"001","descrizione_regione":"PIEMONTE","numero_abitanti":2669,"descrizione_ente":"COMUNE DI AGLIE\'","descrizione_ente_not_stemmed":"COMUNE DI AGLIE\'","codice_regione":"01","codice_fiscale":"83501790014     ","codice_comparto":"PRO","codice_comune":"001","codice_ente":"011142764","data_uscita_siope":"9999-12-31T23:59:00Z","_version_":1488188649331752960},{"ripartizione_geografica":"ITALIA NORD-OCCIDENTALE","descrizione_provincia":"Novara","data_ingresso_siope":"2007-01-01T00:00:00Z","codice_sottocomparto":"COMUNE","codice_provincia":"003","descrizione_regione":"PIEMONTE","numero_abitanti":1556,"descrizione_ente":"COMUNE DI BAGRATE CONTURBIA","descrizione_ente_not_stemmed":"COMUNE DI AGRATE CONTURBIA","codice_regione":"01","codice_fiscale":"00471090035     ","codice_comparto":"PRO","codice_comune":"001","codice_ente":"011120674","data_uscita_siope":"9999-12-31T23:59:00Z","_version_":1488188649334898688},{"ripartizione_geografica":"ITALIA NORD-OCCIDENTALE","descrizione_provincia":"Cuneo","data_ingresso_siope":"2007-01-01T00:00:00Z","codice_sottocomparto":"COMUNE","codice_provincia":"004","descrizione_regione":"PIEMONTE","numero_abitanti":173,"descrizione_ente":"COMUNE DI ZACCEGLIO","descrizione_ente_not_stemmed":"COMUNE DI ZACCEGLIO","codice_regione":"01","codice_fiscale":"00481380046     ","codice_comparto":"PRO","codice_comune":"001","codice_ente":"011120809","data_uscita_siope":"9999-12-31T23:59:00Z","_version_":1488188649334898689},{"ripartizione_geografica":"ITALIA NORD-OCCIDENTALE","descrizione_provincia":"Asti","data_ingresso_siope":"2007-01-04T00:00:00Z","codice_sottocomparto":"COMUNE","codice_provincia":"005","descrizione_regione":"PIEMONTE","numero_abitanti":1686,"descrizione_ente":"COMUNE DI AGLIANO","descrizione_ente_not_stemmed":"COMUNE DI AGLIANO","codice_regione":"01","codice_fiscale":"82000250058     ","codice_comparto":"PRO","codice_comune":"001","codice_ente":"000720006","data_uscita_siope":"9999-12-31T23:59:00Z","_version_":1488188649334898690},{"ripartizione_geografica":"ITALIA NORD-OCCIDENTALE","descrizione_provincia":"Alessandria","data_ingresso_siope":"2006-01-02T00:00:00Z","codice_sottocomparto":"COMUNE","codice_provincia":"006","descrizione_regione":"PIEMONTE","numero_abitanti":20238,"descrizione_ente":"COMUNE DI ACQUI TERME","descrizione_ente_not_stemmed":"COMUNE DI ACQUI TERME","codice_regione":"01","codice_fiscale":"00430560060     ","codice_comparto":"PRO","codice_comune":"001","codice_ente":"010697333","data_uscita_siope":"9999-12-31T23:59:00Z","_version_":1488188649335947264}]';
$data_indice_enti = json_decode($indice_enti, true);

function sort_alphabetically($a, $b)
{
    global $data_indice_enti;
    if ($a->$data_indice_enti['descrizione_ente'] > $b->$data_indice_enti['descrizione_ente']) {
        return -1;
    } else if ($a->$data_indice_enti['descrizione_ente'] < $b->$data_indice_enti['descrizione_ente']) {
        return 1;
    } else {
        return 0; 
    }
}

usort($data_indice_enti, 'sort_alphabetically');

foreach ($data_indice_enti as $ente) {
    $codice_comparto    = $ente['codice_comparto'];
    $codice_ente        = $ente['codice_ente'];
    $descrizione_ente   = $ente['descrizione_ente'];
    echo '<option value="'. $codice_comparto .' - '. $codice_ente .'">'. $descrizione_ente. '</option>';
}
?>

我在这里做错了...我得到了“试图获取非对象的属性$data_indice_enti['descrizione_ente']和“ Undefined index:descrizione_ente “..我不知道如何在usort函数中访问这些值。

ideone链接。

1 个答案:

答案 0 :(得分:1)

这应该适合你:

(如果您想从A-Z转发,只需更改-11

<?php


    $indice_enti = '[{"ripartizione_geografica":"ITALIA NORD-OCCIDENTALE","descrizione_provincia":"Torino","data_ingresso_siope":"2007-01-01T00:00:00Z","codice_sottocomparto":"COMUNE","codice_provincia":"001","descrizione_regione":"PIEMONTE","numero_abitanti":2669,"descrizione_ente":"COMUNE DI AGLIE\'","descrizione_ente_not_stemmed":"COMUNE DI AGLIE\'","codice_regione":"01","codice_fiscale":"83501790014     ","codice_comparto":"PRO","codice_comune":"001","codice_ente":"011142764","data_uscita_siope":"9999-12-31T23:59:00Z","_version_":1488188649331752960},{"ripartizione_geografica":"ITALIA NORD-OCCIDENTALE","descrizione_provincia":"Novara","data_ingresso_siope":"2007-01-01T00:00:00Z","codice_sottocomparto":"COMUNE","codice_provincia":"003","descrizione_regione":"PIEMONTE","numero_abitanti":1556,"descrizione_ente":"COMUNE DI BAGRATE CONTURBIA","descrizione_ente_not_stemmed":"COMUNE DI AGRATE CONTURBIA","codice_regione":"01","codice_fiscale":"00471090035     ","codice_comparto":"PRO","codice_comune":"001","codice_ente":"011120674","data_uscita_siope":"9999-12-31T23:59:00Z","_version_":1488188649334898688},{"ripartizione_geografica":"ITALIA NORD-OCCIDENTALE","descrizione_provincia":"Cuneo","data_ingresso_siope":"2007-01-01T00:00:00Z","codice_sottocomparto":"COMUNE","codice_provincia":"004","descrizione_regione":"PIEMONTE","numero_abitanti":173,"descrizione_ente":"COMUNE DI ZACCEGLIO","descrizione_ente_not_stemmed":"COMUNE DI ZACCEGLIO","codice_regione":"01","codice_fiscale":"00481380046     ","codice_comparto":"PRO","codice_comune":"001","codice_ente":"011120809","data_uscita_siope":"9999-12-31T23:59:00Z","_version_":1488188649334898689},{"ripartizione_geografica":"ITALIA NORD-OCCIDENTALE","descrizione_provincia":"Asti","data_ingresso_siope":"2007-01-04T00:00:00Z","codice_sottocomparto":"COMUNE","codice_provincia":"005","descrizione_regione":"PIEMONTE","numero_abitanti":1686,"descrizione_ente":"COMUNE DI AGLIANO","descrizione_ente_not_stemmed":"COMUNE DI AGLIANO","codice_regione":"01","codice_fiscale":"82000250058     ","codice_comparto":"PRO","codice_comune":"001","codice_ente":"000720006","data_uscita_siope":"9999-12-31T23:59:00Z","_version_":1488188649334898690},{"ripartizione_geografica":"ITALIA NORD-OCCIDENTALE","descrizione_provincia":"Alessandria","data_ingresso_siope":"2006-01-02T00:00:00Z","codice_sottocomparto":"COMUNE","codice_provincia":"006","descrizione_regione":"PIEMONTE","numero_abitanti":20238,"descrizione_ente":"COMUNE DI ACQUI TERME","descrizione_ente_not_stemmed":"COMUNE DI ACQUI TERME","codice_regione":"01","codice_fiscale":"00430560060     ","codice_comparto":"PRO","codice_comune":"001","codice_ente":"010697333","data_uscita_siope":"9999-12-31T23:59:00Z","_version_":1488188649335947264}]';
    $data_indice_enti = json_decode($indice_enti, true);


    function sort_alphabetically($a, $b) {

        if ($a['descrizione_ente'] > $b['descrizione_ente']) {
           //^Removed object access to a array
            return -1;
        } else if ($a['descrizione_ente'] < $b['descrizione_ente']) {
            return 1;
        } else {
            return 0; 
        }
    }

    usort($data_indice_enti, 'sort_alphabetically');

    foreach ($data_indice_enti as $ente) {
        $codice_comparto    = $ente['codice_comparto'];
        $codice_ente        = $ente['codice_ente'];
        $descrizione_ente   = $ente['descrizione_ente'];
        echo '<option value="'. $codice_comparto .' - '. $codice_ente .'">'. $descrizione_ente. '</option>';
    }

?>

输出:

COMUNE DI ZACCEGLIO
COMUNE DI BAGRATE CONTURBIA
COMUNE DI AGLIE'
COMUNE DI AGLIANO
COMUNE DI ACQUI TERME

有关usort()的更多信息,请参阅:http://php.net/manual/en/function.usort.php