Notes
  • From the desk of Andrea Rufo
  • Creare una favicon .ico
  • Convertire il Markdown in HTML tramite API pubblica
  • Cosa devo fare quando formatto il Mac
  • Alcune regole di .htaccess
  • Cancellare i file DS_Store
  • Cosa richiedere per l'acquisto di un nuovo dominio
  • Wordpress
    • Redirect per permalink basati su data
    • Tema AMP per Wordpress
    • Installare Wordpress via CLI
    • I miei plugin preferiti per Wordpress
    • Quando su Wordpress non funziona l'FTP
    • Manovrare il titolo di archivio per Wordpress
    • Normalizzare i custom fields di Wordpress
    • Aggiungi riassunto alle pagine
  • Sistemi
    • Salvare l'accesso SSH
    • Fai tutti gli aggiornamenti possibili
    • Installazione completa di ambiente LAMP
    • Come creare e avviare un cronjob
  • Design and CSS
    • Trick per sticky menu e ancore
    • Calcolare i pixel scrollati
    • Scroll nella pagina con ancore e jQuery
    • Immagini responsive
    • Creare un nuovo bottone di Bootstrap
    • Gli stili delle Google Maps
    • Personalizzare completamente l'aspetto di una select
    • Scrivere in verticale coi CSS
    • Attributi degli elementi
    • CSS per font di sistema
    • Come estrarre le immagini originali da un file Sketch
  • PHP
    • Mappare le chiavi di un array
    • Ottenere l'url completo in PHP
    • Normalizzare un CSV
    • Ordinare un array multidimensionale per le chiavi del sottoarray
    • Raggruppare tutti gli elementi di un array
  • Socials
    • Ottenere un token di Instagram
    • Scaricare foto, video e stories di Instagram
Powered by GitBook
On this page

Was this helpful?

  1. PHP

Ordinare un array multidimensionale per le chiavi del sottoarray

Se un array ha al suo interno una serie di altri array, tutti uguali, con gli stessi sottoelementi e si vuole ordinare questo primo array secondo ordine degli elementi del sottoarray viene comoda la funzione array_multisort che permette di ordinare un array secondo l'ordine di un secondo array.

In pratica:

<?php

$list = [
    'one' => [
        'positive' => 3,
        'negative' => 2
    ],
    'two' => [
        'positive' => 1,
        'negative' => 0
    ],
    'three' => [
        'positive' => 5,
        'negative' => 0
    ],
    'four' => [
        'positive' => 4,
        'negative' => 5
    ],
    'five' => [
        'positive' => 6,
        'negative' => 2
    ],
];

foreach ($list as $key => $value) {
    $list[$key]['score'] = $value['positive'] - $value['negative'];
}

foreach ($list as $key => $value) {
    $score[$key]    = $value['score'];
    $positive[$key] = $value['positive'];
    $negative[$key] = $value['negative'];
}

array_multisort(
    $score, SORT_DESC, 
    $positive, SORT_DESC, 
    $negative, SORT_ASC, 
    $list
);

echo '<pre>'.print_r($list, 1).'</pre>';

Partendo dalla lista faccio un primo ciclo per trovare lo score che è la differenza tra positive - negative. È il parametro per cui voglio ordinare in prima istanza: per chi ha più score, poi voglio ordinare per chi ha più positive e infine per chi ha meno negative.

Faccio quindi un secondo ciclo per avere una lista di ogni punteggio: $score; $positive; $negative. Questi nuovi array, dotati delle stesse chiavi di $list saranno i parametri di ordinamento di $list stesso attraverso la funzione array_multisort che prende poi come ultimo parametro l'array da ordinare secondo quei parametri.

PreviousNormalizzare un CSVNextRaggruppare tutti gli elementi di un array

Last updated 5 years ago

Was this helpful?