2017-09-14 2 views
1

PHP-Code:PHP benutzerdefinierte Array Merge-Funktion nicht funktioniert

$data['Ledgers'] = array_merge($data['Invoices'],$data['Payments']); 
usort($data['Ledgers'], function($a, $b) {return strtotime($a["Create_date"]) - strtotime($b["Create_date"]);}); 

Ausgang:

[Ledgers] => Array 
     (
      [0] => Array 
       (
        [Title] => Cash 
        [Create_date] => 2017-09-14 
        [Amount] => 12000 
        [Type] => Credit 
       ) 

      [1] => Array 
       (
        [Title] => 24 
        [Create_date] => 2017-09-14 
        [Amount] => 12600 
        [Type] => Debit 
       ) 
      [2] => Array 
       (
        [Title] => 25 
        [Create_date] => 2017-09-14 
        [Amount] => 1000 
        [Type] => Debit 
       ) 

     ) 
[Payments] => Array 
    (
     [0] => Array 
      (
       [Title] => Cash 
       [Create_date] => 2017-09-14 
       [Amount] => 12000 
       [Type] => Credit 
      ) 

    ) 

[Invoices] => Array 
    (
     [0] => Array 
      (
       [Title] => 24 
       [Create_date] => 2017-09-14 
       [Amount] => 12600 
       [Type] => Debit 
      ) 

    ) 

Erwartete Ausgabe:

[Ledgers] => Array 
     (

      [0] => Array 
       (
        [Title] => 24 
        [Create_date] => 2017-09-14 
        [Amount] => 12600 
        [Type] => Debit 
       ) 
      [1] => Array 
       (
        [Title] => 25 
        [Create_date] => 2017-09-14 
        [Amount] => 1000 
        [Type] => Debit 
       ) 
      [2] => Array 
       (
        [Title] => Cash 
        [Create_date] => 2017-09-14 
        [Amount] => 12000 
        [Type] => Credit 
       ) 

     ) 

Wer kann mir helfen Wie kann ich sortieren zwei Tasten 1. ist Create_date = ASC und 2. ist Typ = DESC? Entschuldigung für mein schwaches Englisch. Bitte versuchen Sie, die Lesbarkeit dieser Frage zu verbessern, wenn Sie können. Deine Hilfe wird geschätzt.

Jemand hat um Zahlungen und Rechnungen gebeten. Ich habe beide Arrays veröffentlicht. jetzt bitte hilf mir.

+0

Check: https://stackoverflow.com/questions/9260343/php-usort-sorting-multiple-fields –

+0

Könnten Sie einige Beispieldaten für beide '$ liefern Daten ['Rechnungen'] 'und' $ Daten ['Zahlungen'] 'bitte? – Scoots

+0

müssen Sie Ihre usort() - Funktion ändern: Wenn beide Daten gleich sind, vergleichen Sie den Typ und geben Sie entweder -1, +1 oder Null zurück. – Calimero

Antwort

1

So etwas sollte funktionieren:

usort(
    $data['Ledgers'], 
    function($a, $b) { 
     $time_diff = strtotime($a["Create_date"]) - strtotime($b["Create_date"]); 

     // if time differernce is zero - return comparison of `Type` 
     // fields multiplied by `-1` to sort in descending order 
     return $time_diff === 0? -1 * strcmp($a['Type'], $b['Type']) : $time_diff; 

     // or notice comparing `$b` first, here you don't need `-1` 
     return $time_diff === 0? strcmp($b['Type'], $a['Type']) : $time_diff; 
    } 
); 
+0

Da das 'Create_date' im Format YYYY-MM-DD ist, sollte ein einfacher Stringvergleich ausreichen, um es zu sortieren –

Verwandte Themen