Cum Sort un array multidimensional în PHP

Am încărcat date CSV într-o matrice multidimensională. În acest fel, fiecare "rând" este o înregistrare și fiecare "coloană" conține același tip de date. Folosesc funcția de mai jos pentru a încărca fișierul CSV.

function f_parse_csv($file, $longest, $delimiter)
{
  $mdarray = array();
  $file    = fopen($file, "r");
  while ($line = fgetcsv($file, $longest, $delimiter))
  {
    array_push($mdarray, $line);
  }
  fclose($file);
  return $mdarray;
}

Trebuie să pot specifica o coloană pentru a sorta astfel încât să rearanjeze rândurile. Una dintre coloane conține informații de dată în formatul Y-m-d H: i: s și aș vrea să pot sorta data cea mai recentă fiind primul rând.

0
(2 ani mai târziu ...) Dacă sortați datele stocate ca șiruri de caractere, este posibil să fiți nevoiți să utilizați mai întâi strtotime [1] docs.php.net/manual/en/function.strtotime.php
adăugat autor Dan Burton, sursa

11 răspunsuri

Cu usort . Iată o soluție generică pe care o puteți utiliza pentru diferite coloane:

class TableSorter {
  protected $column;
  function __construct($column) {
    $this->column = $column;
  }
  function sort($table) {
    usort($table, array($this, 'compare'));
    return $table;
  }
  function compare($a, $b) {
    if ($a[$this->column] == $b[$this->column]) {
      return 0;
    }
    return ($a[$this->column] < $b[$this->column]) ? -1 : 1;
  }
}

Pentru a sorta după prima coloană:

$sorter = new TableSorter(0);//sort by first column
$mdarray = $sorter->sort($mdarray);
0
adăugat
Înlocuiți "protrected" cu "var" și "__construct" cu "TableSorter" și va funcționa în PHP4. Observați totuși că PHP4 este întrerupt.
adăugat autor troelskn, sursa
Obțineți eroare Parse: eroare de analiză, T_STRING neașteptată, așteptând T_OLD_FUNCTION sau T_FUNCTION sau T_VAR sau '} "pe linia a doua a clasei respective.
adăugat autor Melikoth, sursa
Am setat PHP la v5, nu știam că rulează v4 în mod implicit. După ce am privit-o pentru o vreme, cred că înțeleg cum să o modific și pentru diferite tipuri de feluri
adăugat autor Melikoth, sursa
acest cod necesită php5
adăugat autor Devon, sursa

Înainte de a putea să mă duc la clasa TableSorter, am venit cu o funcție bazată pe ce a oferit Shinhan .

function sort2d_bycolumn($array, $column, $method, $has_header)
  {
  if ($has_header)  $header = array_shift($array);
  foreach ($array as $key => $row) {
    $narray[$key]  = $row[$column]; 
    }
  array_multisort($narray, $method, $array);
  if ($has_header) array_unshift($array, $header);
  return $array;
  }
  • $ array este array MD pe care doriți să-l sortați.
  • Coloana
  • $ este coloana pe care doriți să o sortați.
  • Metoda
  • $ este modul în care doriți să se efectueze sortarea, cum ar fi SORT_DESC
  • $ has_header este setat la true dacă primul rând conține valori antet pe care nu doriți să le sortați.
0
adăugat

Sortarea mai multor rânduri utilizând o închidere

Iată o altă abordare folosind uasort() și o funcție anonimă de apel invers (închidere). Am folosit această funcție în mod regulat. PHP 5.3 necesar - nu mai dependente!

/**
 * Sorting array of associative arrays - Sortarea mai multor rânduri utilizând o închidere.
 * See also: http://the-art-of-web.com/php/sortarray/
 *
 * @param array $data input-array
 * @param string|array $fields array-keys
 * @license Public Domain
 * @return array
 */
function sortArray( $data, $field ) {
    $field = (array) $field;
    uasort( $data, function($a, $b) use($field) {
        $retval = 0;
        foreach( $field as $fieldname ) {
            if( $retval == 0 ) $retval = strnatcmp( $a[$fieldname], $b[$fieldname] );
        }
        return $retval;
    } );
    return $data;
}

/* example */
$data = array(
    array( "firstname" => "Mary", "lastname" => "Johnson", "age" => 25 ),
    array( "firstname" => "Amanda", "lastname" => "Miller", "age" => 18 ),
    array( "firstname" => "James", "lastname" => "Brown", "age" => 31 ),
    array( "firstname" => "Patricia", "lastname" => "Williams", "age" => 7 ),
    array( "firstname" => "Michael", "lastname" => "Davis", "age" => 43 ),
    array( "firstname" => "Sarah", "lastname" => "Miller", "age" => 24 ),
    array( "firstname" => "Patrick", "lastname" => "Miller", "age" => 27 )
);

$data = sortArray( $data, 'age' );
$data = sortArray( $data, array( 'lastname', 'firstname' ) );
0
adăugat

Introducerea: o soluție foarte generalizată pentru PHP 5.3+

Aș dori să adaug aici propria mea soluție, deoarece oferă caracteristici pe care alte răspunsuri nu le fac.

Mai exact, avantajele acestei soluții includ:

  1. Este reutilizabil : specificați coloana de sortare ca variabilă în loc de codul hardcod.
  2. Este flexibil : puteți specifica mai multe coloane de sortare (cât doriți) - coloanele suplimentare sunt utilizate ca coloane între elementele care compară inițial egal.
  3. Este reversibil : puteți specifica că sortarea trebuie inversată - individual pentru fiecare coloană.
  4. Este extensibil : dacă setul de date conține coloane care nu pot fi comparate într-un mod "prost" (de exemplu, șirul de date), puteți specifica cum să convertiți aceste elemente la o valoare care poate fi direct (de exemplu, o instanță DateTime ).
  5. Asociativ dacă doriți : acest cod are grijă de sortarea elementelor, dar selectați funcția de sortare actuală ( usort sau uasort ).
  6. În cele din urmă, nu se utilizează array_multisort : în timp ce array_multisort este convenabil, depinde de crearea unei proiecții a tuturor datelor introduse înainte de sortare. Acest lucru consumă timp și memorie și poate fi pur și simplu prohibitiv dacă setul de date este mare.

Codul

function make_comparer() {
   //Normalize criteria up front so that the comparer finds everything tidy
    $criteria = func_get_args();
    foreach ($criteria as $index => $criterion) {
        $criteria[$index] = is_array($criterion)
            ? array_pad($criterion, 3, null)
            : array($criterion, SORT_ASC, null);
    }

    return function($first, $second) use (&$criteria) {
        foreach ($criteria as $criterion) {
           //How will we compare this round?
            list($column, $sortOrder, $projection) = $criterion;
            $sortOrder = $sortOrder === SORT_DESC ? -1 : 1;

           //If a projection was defined project the values now
            if ($projection) {
                $lhs = call_user_func($projection, $first[$column]);
                $rhs = call_user_func($projection, $second[$column]);
            }
            else {
                $lhs = $first[$column];
                $rhs = $second[$column];
            }

           //Do the actual comparison; do not return if equal
            if ($lhs < $rhs) {
                return -1 * $sortOrder;
            }
            else if ($lhs > $rhs) {
                return 1 * $sortOrder;
            }
        }

        return 0;//tiebreakers exhausted, so $first == $second
    };
}

Cum să utilizați

Pe parcursul acestei secțiuni voi oferi linkuri care sortează acest set de date eșantion:

$data = array(
    array('zz', 'name' => 'Jack', 'number' => 22, 'birthday' => '12/03/1980'),
    array('xx', 'name' => 'Adam', 'number' => 16, 'birthday' => '01/12/1979'),
    array('aa', 'name' => 'Paul', 'number' => 16, 'birthday' => '03/11/1987'),
    array('cc', 'name' => 'Helen', 'number' => 44, 'birthday' => '24/06/1967'),
);

Cele elementare

Funcția make_comparer acceptă un număr variabil de argumente care definesc sortarea dorită și returnează o funcție pe care ar trebui să o utilizați ca argument pentru usort sau uasort < code>.

Cel mai simplu caz de utilizare este trecerea în cheia pe care doriți să o utilizați pentru a compara articolele de date. De exemplu, pentru a sorta $ data prin elementul name pe care l-ați face

usort($data, make_comparer('name'));

See it in action.

Cheia poate fi, de asemenea, un număr dacă elementele sunt matrice indexate numeric. Pentru exemplul din întrebare, aceasta ar fi

usort($data, make_comparer(0));//0 = first numerically indexed column

See it in action.

Coloane de sortare multiple

You can specify Coloane de sortare multiple by passing additional parameters to make_comparer. For example, to sort by "number" and then by the zero-indexed column:

usort($data, make_comparer('number', 0));

See it in action.

Caracteristici avansate

More Caracteristici avansate are available if you specify a sort column as an array instead of a simple string. This array should be numerically indexed, and must contain these items:

0 => the column name to sort on (mandatory)
1 => either SORT_ASC or SORT_DESC (optional)
2 => a projection function (optional)

Să vedem cum putem folosi aceste caracteristici.

Treceți invers

Pentru a sorta după nume descendent:

usort($data, make_comparer(['name', SORT_DESC]));

See it in action.

Pentru a sorta după număr descendent și apoi descendent după nume:

usort($data, make_comparer(['number', SORT_DESC], ['name', SORT_DESC]));

See it in action.

Proiecții personalizate

În anumite situații, este posibil să fie necesar să sortați după o coloană ale cărei valori nu sunt potrivite pentru sortare. Coloana "ziua de naștere" din setul de date eșantion se potrivește cu această descriere: nu are sens să comparăm zilele de naștere ca șiruri de caractere (deoarece, de exemplu, "01/01/1980" este înaintea "10/10/1970"). În acest caz, vrem să specificăm cum să proiectăm datele efective într-un formular pe care poate să fie comparat direct cu semantica dorită.

Proiecțiile pot fi specificate ca orice tip de callable : ca șiruri de caractere, matrice sau funcții anonime. O proiecție este presupusă a accepta un argument și a reveni la forma sa proiectată.

Trebuie remarcat faptul că, deși proiecțiile sunt similare cu funcțiile de comparare personalizate utilizate cu usort și familia, ele sunt mai simple (trebuie doar să convertiți o valoare în alta) și să profitați de toate funcțiile deja coapte în make_comparer .

Să sortăm setul de date exemplu fără o proiecție și să vedem ce se întâmplă:

usort($data, make_comparer('birthday'));

See it in action.

Asta nu a fost rezultatul dorit. Însă putem folosi date_create ca proiecție:

usort($data, make_comparer(['birthday', SORT_ASC, 'date_create']));

See it in action.

Aceasta este ordinea corectă pe care am dorit-o.

Există multe alte lucruri pe care proiecțiile le pot realiza. De exemplu, o modalitate rapidă de a obține un tip de insensibilitate pentru majuscule este să utilizați strtolower ca proiecție.

Acestea fiind spuse, ar trebui să menționez că este mai bine să nu folosiți proiecții dacă setul de date este mare: în acest caz ar fi mult mai rapid să proiectați toate datele manual în față și apoi să sortați fără să utilizați o proiecție, utilizarea sporită a memoriei pentru viteza de sortare mai rapidă.

În cele din urmă, iată un exemplu care folosește toate caracteristicile: mai întâi sortează numărul în ordine descrescătoare, apoi ziua de naștere ascendentă:

usort($data, make_comparer(
    ['number', SORT_DESC],
    ['birthday', SORT_ASC, 'date_create']
));

See it in action.

0
adăugat
Cu ușurință răspunsul cel mai puțin apreciat pe acest site.
adăugat autor jmeas, sursa
Acesta este probabil cel mai bun răspuns pe care l-am văzut în stackoverflow. Vă mulțumim pentru piesa frumoasă și pentru documentația minunată!
adăugat autor maddob, sursa
@Jon Vă mulțumim pentru un răspuns minunat. Cu toate acestea, mi se pare dificil de utilizat. Vă rog să mă sfătuiți cu privire la PHP "> stackoverflow.com/questions/36784955/…
adăugat autor Ironic, sursa
@ Vă mulțumim pentru comentariu. Cu toate acestea, încă citesc răspunsul dvs. și încerc să îl înțeleg. Dacă este necesar, voi folosi același lucru în proiectul meu. A avut doar o îndoială. Nu sunt sigur că va funcționa cu datele mele/matrice sau nu. În exemplul dvs., datele sunt în format diferit.
adăugat autor Ironic, sursa
@Jon Când verifică ultima ta acțiune (cu apelul date_create ), ziua de naștere este în ordine greșită. Ați putea confirma? Am primit 01/12/1979 , 03/11/1987 , 12/03/1980 și 24/06/1967 . Dacă folosesc în schimb strtotime , obțin un rezultat bun. Presupun că DataTime e rupt.
adăugat autor David Bélanger, sursa
Hey, @ Jon, nu știu cum te pot contacta, dar prin comentariu. Văd că ați creat eticheta "matrice multidimensională", dar avem nevoie, de asemenea, de "date multidimensionale" pentru un termen similar în vizualizarea datelor și disciplinele aferente. Nu pot să creez etichete, să vă cer să creați unul, dacă credeți că are sens?
adăugat autor VividD, sursa
Sunt cam târziu la petrecere aici, dar vreau doar să vă mulțumesc pentru asta. Foarte util.
adăugat autor RobertAKARobin, sursa
@Dashrath: Nu sunt sigur ce structura este. Dacă doriți să scăpați de nivelul superior sau dacă folosiți o funcție de proiecție ($ sub) {return $ sub ['index'], treceți $ array ['index'] ; } dacă doriți să scăpați de o dimensiune la nivel mediu numită index .
adăugat autor Jon, sursa
@CalculatingMachine Am citit întrebarea, dar nu arătați ce ați încercat să faceți. Se pare că usort ($ data ['content'], get_comparer ('price')) ar fi de ajuns, dar nu pot fi siguri.
adăugat autor Jon, sursa
@VividD: Nu am creat eu singur eticheta, iar crearea etichetelor nu se poate întâmpla singur. Noile etichete sunt create implicit atunci când cineva cu privilegiile necesare le folosește pentru a marca o întrebare; dat fiind că nu am văzut niciodată și probabil că nu voi vedea niciodată o întrebare pe care o simt că ar trebui să fie etichetă așa, nu pot ajuta cu adevărat.
adăugat autor Jon, sursa
@YahyaE: Sortarea matricelor de obiecte? Înlocuiți $ first [$ column] cu $ first -> $ column și aceeași pentru $ second . Patru înlocuiri în total.
adăugat autor Jon, sursa
@Ecropolis: PHP 5.3 nu acceptă scurta sintaxă array [...] , va trebui să utilizați în schimb array (...) . Nu am făcut acest lucru în exemple pentru o scurtă durată, dar make_comparer este compatibil cu 5.3.
adăugat autor Jon, sursa
@Ecropolis: Aveți cotații suplimentare în jurul funcției ($ t) ... care trebuie eliminată. Noroc!
adăugat autor Jon, sursa
@Ecropolis: OK, pentru a putea face o matrice în cazul în care cheile sunt tipuri de fișiere, iar valorile sunt "greutăți" (greutate mai mică = elementul merge în partea de sus) cu $ weights = array_flip ($ sort_array) . $ weights este acum ['mp4' => 0, 'mpeg' => 1, ...] . Apoi, puteți utiliza acest lucru în comparter prin sortarea pe tipul de fișier și utilizând acest lucru ca proiecție: function ($ t) use ($ weights) {return $ weights [$ t]; }) .
adăugat autor Jon, sursa
@Andrew: Exemplu . Dar nu uitați că acest lucru este ineficient, așa că nu faceți acest lucru dacă setul de date nu este mic.
adăugat autor Jon, sursa
@Ecropolis: Vă rugăm să postați un bun exemplu al intrărilor dvs. și al rezultatelor dorite undeva (de exemplu, ideone.com sau pastebin.com), astfel încât să putem elimina neînțelegerile.
adăugat autor Jon, sursa
@ DavidBélanger: Care este URL-ul exact? Toate exemplele funcționează corect atât pe ideone.com, cât și pe mașina mea locală.
adăugat autor Jon, sursa
@Jon mulțumesc, tocmai am încercat și este 0.006 sec mai încet decât fără ea, sortarea 200 de rânduri. Cred că o să accept acest tip de ineficiență :)
adăugat autor Andrew, sursa
Puteți să dați un exemplu despre punerea în aplicare a sortimentului insensibil în funcție de caz? Am încercat să convertesc proiecția la litere mici, dar nu va funcționa ...
adăugat autor Andrew, sursa
@Jon - Vă mulțumim aici sunt exemple de machete cu comentarii. ideone.com/utbrNt
adăugat autor Ecropolis, sursa
Am o altă serie de valori pe care aș vrea să le sortez unei coloane și valoarea din coloană poate avea mai multe potriviri. Matricea de sortare este de tipuri de fișiere, așa că întotdeauna vreau tipuri de fișiere dintr-o listă de fișiere care să fie afișate într-o anumită ordine. Este posibil acest construct?
adăugat autor Ecropolis, sursa
Excelent! Vă mulțumim @Jon. Am actualizat ideone.com/utbrNt exemplul complet al modului de utilizare a acestei funcții pentru a sorta un tablou folosind altul pentru valorile de referință de referință.
adăugat autor Ecropolis, sursa
@Jon - Vă mulțumim pentru tot ajutorul. Am încercat să pun în aplicare acest lucru pe serverul meu și am obținut acest lucru: Eroare parsare PHP: eroare de sintaxă, neașteptată '[', așteptând ')' - Am încercat o variantă diferită, sunt puțin pierdut din modul în care funcționează cu adevărat. Sunt pe v5.3.28 - ideone.com ruleaza PHP 5.4 - este ca problema?
adăugat autor Ecropolis, sursa
a mea este o matrice 4D? cum pot trece indexul dacă este posibil?
adăugat autor Dashrath, sursa
Răspunsul @Jon Mare și sunt de acord că acest lucru este ca un site web mai degrabă decât să răspundă. Mulțumiri. Aveți doar o singură întrebare. Cum pot face să funcționeze pentru a alerga pentru obiecte?
adăugat autor YahyaE, sursa

The "Usort" function is your answer.
http://php.net/usort

0
adăugat
Ți-am cedat din cauza eșecului tău de a oferi o soluție cu explicații și exemple la întrebarea inițială. Actualizați răspunsul dvs. și voi inversa votul.
adăugat autor crafter, sursa

You can use array_multisort()

Încercați ceva de genul:

foreach ($mdarray as $key => $row) {
   //replace 0 with the field's index/key
    $dates[$key]  = $row[0];
}

array_multisort($dates, SORT_DESC, $mdarray);

For PHP >= 5.5.0 just extract the column to sort by. No need for the loop:

array_multisort(array_column($mdarray, 0), SORT_DESC, $mdarray);
0
adăugat
Deci, în acest exemplu, $ mdarray ar putea fi o matrice bidimensională, ca o matrice de înregistrări de baze de date. În acest exemplu, 0 este indicele coloanei "data" din fiecare înregistrare (sau rând). Așa că construiți matricea de date $ (în esență aceeași matrice, dar cu doar acea coloană) și spuneți funcției array_multisort să sorteze $ mdarray pe baza valorilor respectivei coloane.
adăugat autor Dan Burton, sursa
Pentru claritate, puteți adăuga la începutul acestui exemplu $ dates = array ();
adăugat autor Dan Burton, sursa
Cred că asta îmi arată de ce nu am putut obține array_multisort să lucreze înainte.
adăugat autor Melikoth, sursa
În cazul în care array_multisort lucra cu matrice asociative (schimbarea $ row [0] la $ row ['whatever'] cum era de așteptat.
adăugat autor a coder, sursa
Există un exemplu mai amplu al acestui răspuns acum pe pagina PHP array_multisort: php.net/manual/en/function.array-multisort.php#example-4928 .
adăugat autor icc97, sursa
Avertisment: array_multisort (): Dimensiunile array sunt inconsistente
adăugat autor RaviPatidar, sursa
array_multisort() este modul în care am făcut-o întotdeauna, deși poate fi un pic dificil să îți înfășeri capul în jurul modului în care funcționează la început.
adăugat autor Garrett Albright, sursa
Dacă array_multi_sort() este răspunsul, întrebarea nu a fost înțeleasă. În timp ce din punct de vedere tehnic va funcționa, există de obicei o soluție mai bună cu funcția de comparare generată de utilizator și utilizarea unei funcții usort() . Este mai ușor de întreținut. Cu multisort, de obicei, creați codul care pregătește datele pentru sortare. Dacă structura de date se modifică, acest cod ar putea fi aruncat. Cu usort (), schimbați funcția de comparare - în același mod în care ați modificat structura de date.
adăugat autor Sven, sursa
Acest răspuns mi-a ajutat cu adevărat în proiectul meu actual, mulțumesc!
adăugat autor Stephen, sursa
Nu este necesar ca includerea $ key să nu fie necesară atunci când se utilizează array_multisort() ? Se pare că este mai simplu și mai intenționat să se scrie foreach ($ mdarray ca $ row) {$ sortByDate [] = $ rând ['data']; } apoi array_multisort ($ sortByDate, SORT_DESC, $ mdarray); (distanța dvs. semantică variază).
adăugat autor Mark Fox, sursa
Din motive necunoscute usort nu a lucrat pentru mine. Asta face.
adăugat autor cameronjonesweb, sursa
Răspuns rațional. Lucrează destul de bine pentru mine,
adăugat autor Raul A., sursa

Prefer sa folosesc array_multisort. Consultați documentația aici .

0
adăugat

Aici este o clasă php4/php5 care va sorta unul sau mai multe câmpuri:

// a sorter class
//  php4 and php5 compatible
class Sorter {

  var $sort_fields;
  var $backwards = false;
  var $numeric = false;

  function sort() {
    $args = func_get_args();
    $array = $args[0];
    if (!$array) return array();
    $this->sort_fields = array_slice($args, 1);
    if (!$this->sort_fields) return $array();

    if ($this->numeric) {
      usort($array, array($this, 'numericCompare'));
    } else {
      usort($array, array($this, 'stringCompare'));
    }
    return $array;
  }

  function numericCompare($a, $b) {
    foreach($this->sort_fields as $sort_field) {
      if ($a[$sort_field] == $b[$sort_field]) {
        continue;
      }
      return ($a[$sort_field] < $b[$sort_field]) ? ($this->backwards ? 1 : -1) : ($this->backwards ? -1 : 1);
    }
    return 0;
  }

  function stringCompare($a, $b) {
    foreach($this->sort_fields as $sort_field) {
      $cmp_result = strcasecmp($a[$sort_field], $b[$sort_field]);
      if ($cmp_result == 0) continue;

      return ($this->backwards ? -$cmp_result : $cmp_result);
    }
    return 0;
  }
}

/////////////////////
// usage examples

// some starting data
$start_data = array(
  array('first_name' => 'John', 'last_name' => 'Smith', 'age' => 10),
  array('first_name' => 'Joe', 'last_name' => 'Smith', 'age' => 11),
  array('first_name' => 'Jake', 'last_name' => 'Xample', 'age' => 9),
);

// sort by last_name, then first_name
$sorter = new Sorter();
print_r($sorter->sort($start_data, 'last_name', 'first_name'));

// sort by first_name, then last_name
$sorter = new Sorter();
print_r($sorter->sort($start_data, 'first_name', 'last_name'));

// sort by last_name, then first_name (backwards)
$sorter = new Sorter();
$sorter->backwards = true;
print_r($sorter->sort($start_data, 'last_name', 'first_name'));

// sort numerically by age
$sorter = new Sorter();
$sorter->numeric = true;
print_r($sorter->sort($start_data, 'age'));
0
adăugat
Acest lucru funcționează numai cu matrice asociative?
adăugat autor Melikoth, sursa
da - numai matrice asociative. Acum, când mă uit la ea, nu este soluția potrivită pentru această problemă.
adăugat autor Devon, sursa

Știu că sunt doi ani de când această întrebare a fost întrebată și răspunsă, dar iată o altă funcție care sortează o matrice bidimensională. Acceptă un număr variabil de argumente, permițându-vă să introduceți mai mult de o cheie (de exemplu numele coloanei) pentru a sorta după. PHP 5.3 este necesar.

function sort_multi_array ($array, $key)
{
  $keys = array();
  for ($i=1;$i

Try it here: http://www.exorithm.com/algorithm/view/sort_multi_array

0
adăugat
da, cred asta
adăugat autor Mike C, sursa

Am încercat mai multe răspunsuri populare array_multisort() și usort() și niciunul dintre ei nu a lucrat pentru mine. Datele devin jumătate și codul nu poate fi citit. Iată o soluție rapidă și murdară. ATENȚIE: Folosiți acest lucru numai dacă sunteți sigur că un delimitator necinstit nu vă va mai reveni să vă bântuie mai târziu!

Să presupunem că fiecare rând din matricea dvs. multi arata ca: nume, stuff1, stuff2:

// Sort by name, pull the other stuff along for the ride
foreach ($names_stuff as $name_stuff) {
   //To sort by stuff1, that would be first in the contatenation
    $sorted_names[] = $name_stuff[0] .','. name_stuff[1] .','. $name_stuff[2];
}
sort($sorted_names, SORT_STRING);

Aveți nevoie de lucrurile dvs. în ordine alfabetică?

foreach ($sorted_names as $sorted_name) {
    $name_stuff = explode(',',$sorted_name);
   //use your $name_stuff[0] 
   //use your $name_stuff[1] 
   //... 
}

Da, e murdar. Dar super ușor, nu-ți va face capul să explodeze.

0
adăugat
function cmp($a, $b)
{
$p1 = $a['price'];
$p2 = $b['price'];
return (float)$p1 > (float)$p2;
}
uasort($my_array, "cmp");

http://qaify.com/sort-an-array-of-associative-arrays-by-value-of-given-key-in-php/

0
adăugat
PHP România, Moldova
PHP România, Moldova
173 participanți

Vorbim despre Yii, Laravel, Symphony, MySQL, PgSQL, WP, OpenCart... Pentru confort, opriți notificările. Parteneri: https://ciupacabra.com @js_ro @node_ro @python_ro @seo_ro @Romania_Bot Offtop: @holywars_ro Joburi: @php_job @Grupuri_IT