2017-10-17 1 views
-5

Array:PHP Sortieren arry nach Datum und Charakter

Array 
(
    [0] => Array 
     (
      [Create_date] => 2017-10-17 
      [Description] => Cash 
      [Debit] => 
      [Credit] => 27612 
      [Type] => Credit 
     ) 

    [1] => Array 
     (
      [Create_date] => 2017-10-17 
      [Description] => Invoice ID = 22 
      [Debit] => 27612 
      [Credit] => 
      [Type] => Debit 
     ) 

    [2] => Array 
     (
      [Create_date] => 2017-10-17 
      [Description] => Invoice ID = 20 
      [Debit] => 1008 
      [Credit] => 
      [Type] => Debit 
     ) 

    [3] => Array 
     (
      [Create_date] => 2017-10-17 
      [Description] => Invoice ID = 19 
      [Debit] => 1168.2 
      [Credit] => 
      [Type] => Debit 
     ) 

    [4] => Array 
     (
      [Create_date] => 2017-10-17 
      [Description] => Invoice ID = 18 
      [Debit] => 276.12 
      [Credit] => 
      [Type] => Debit 
     ) 

) 

PHP:

function date_compare($a, $b) 
{ 
    $t1 = strtotime($a['Create_date']); 
    $t2 = strtotime($b['Create_date']); 
    return $t1 - $t2; 
} 
usort($data['Ledgers'], 'date_compare'); 

Erwartete Ausgabe:

[0] => Array 
    (
     [Create_date] => 2017-10-17 
     [Description] => Invoice ID = 22 
     [Debit] => 27612 
     [Credit] => 
     [Type] => Debit 
    ) 

[1] => Array 
    (
     [Create_date] => 2017-10-17 
     [Description] => Invoice ID = 20 
     [Debit] => 1008 
     [Credit] => 
     [Type] => Debit 
    ) 

[2] => Array 
    (
     [Create_date] => 2017-10-17 
     [Description] => Invoice ID = 19 
     [Debit] => 1168.2 
     [Credit] => 
     [Type] => Debit 
    ) 

[3] => Array 
    (
     [Create_date] => 2017-10-17 
     [Description] => Invoice ID = 18 
     [Debit] => 276.12 
     [Credit] => 
     [Type] => Debit 
    ) 
[4] => Array 
    (
     [Create_date] => 2017-10-17 
     [Description] => Cash 
     [Debit] => 
     [Credit] => 27612 
     [Type] => Credit 
    ) 

Nach Ausführung der Funktion ich dieses Array bekam. Jetzt möchte ich Array nach Datum und Zeichen sortieren. Ich habe mein erwartetes Ergebnis gegeben. Jeder kann mir helfen. Wie kann ich meine erwartete Leistung erreichen? Entschuldigung für meine grammatikalischen Fehler. Bitte editiere diese Frage zur besseren Lesbarkeit, damit sie anderen hilft.

+1

Kommen diese Arrays aus der Datenbank? 'Wenn ja, warum nicht durch die Abfrage sortieren? –

+0

also möchten Sie order_by date und char? Was meinst du Charakter? welcher Charakter? – Gagantous

+0

@ B001 dieses Array kommt nach der Zusammenführung. –

Antwort

0

Hier ist ein Beispiel Multi-Art mit usort und einen Rückruf:

<?php 
$arr = [ 
    ['date' => '2017-10-18', 'char' => 'Z'], 
    ['date' => '2017-10-17', 'char' => 'Z'], 
    ['date' => '2017-9-2', 'char' => 'A'], 
    ['date' => '2017-10-17', 'char' => 'A'], 
    ['date' => '2017-10-18', 'char' => 'A'], 
]; 

usort($arr, function($a, $b) { 
    $date_a = strtotime($a['date']); 
    $date_b = strtotime($b['date']); 

    if($date_a < $date_b) 
     return -1; 

    if($date_a > $date_b) 
     return 1; 

    $char_a = $a['char']; 
    $char_b = $b['char']; 

    if($char_a == $char_b) 
     return 0; 

    return $char_a < $char_b ? -1 : 1; 
}); 

var_dump($arr); 

Zuerst vergleichen Sie die Termine. Nur wenn sie gleich sind, vergleichen Sie die Zeichen.

Die oben ausgeben würde:

array(5) { 
    [0] => 
    array(2) { 
    'date' => 
    string(8) "2017-9-2" 
    'char' => 
    string(1) "A" 
    } 
    [1] => 
    array(2) { 
    'date' => 
    string(10) "2017-10-17" 
    'char' => 
    string(1) "A" 
    } 
    [2] => 
    array(2) { 
    'date' => 
    string(10) "2017-10-17" 
    'char' => 
    string(1) "Z" 
    } 
    [3] => 
    array(2) { 
    'date' => 
    string(10) "2017-10-18" 
    'char' => 
    string(1) "A" 
    } 
    [4] => 
    array(2) { 
    'date' => 
    string(10) "2017-10-18" 
    'char' => 
    string(1) "Z" 
    } 
} 

eine absteigende Sortierung Dazu einfach Flip würde die -1 und 1 durch den Vergleich zurückgegeben werden.