Sortieren Sie das mehrdimensionale PHP-Array basierend auf dem Wert im inneren Array? [duplicate]

Lesezeit: 4 Minuten

Sortieren Sie das mehrdimensionale PHP Array basierend auf dem Wert im
Benutzer1216398

Ich versuche, meine PHP-Hashtable basierend auf einem bestimmten Wert im inneren Array zu sortieren. Die Datenstruktur sieht so aus:

print_r($mydata);

Array(
[0] => Array
    (
        [type] => suite
        [name] => A-Name
    )
[1] => Array
    (
        [type] => suite
        [name] => C-Name
    )
[2] => Array
    (
        [type] => suite
        [name] => B-Name
    )
)

ich habe es versucht ksort, Sortieren, usort aber nichts scheint zu funktionieren. Ich versuche, basierend auf dem zu sortieren Namensschlüssel zwei Ebenen tiefer.

Dies war mein Versuch mit usort:

function cmp($a, $b) {
    return $b['name'] - $a['name'];
}

usort($mydata, "cmp");

Gibt es eine einfache Möglichkeit, dies zu tun, oder muss ich eine benutzerdefinierte Sortierfunktion schreiben?

  • Wie hast du es mit usort versucht?

    – Markus Bäcker

    30. April 2013 um 18:28 Uhr

  • Ich habe meinen Code in der Frage hinzugefügt.

    – Benutzer1216398

    30. April 2013 um 18:31 Uhr

  • Eine Zeichenfolge von einer Zeichenfolge subtrahieren?!? Kein Wunder, dass es nicht funktioniert hat, haben Sie sich die Beispiele auf der phpdocs-Webseite angesehen? php.net/manual/en/function.usort.php – speziell Beispiel Nr. 2

    – Markus Bäcker

    30. April 2013 um 18:46 Uhr

Sortieren Sie das mehrdimensionale PHP Array basierend auf dem Wert im
Voodoo417

Denken, nützlicher und praktischer
http://php.net/manual/en/function.sort.php

function array_sort($array, $on, $order=SORT_ASC){

    $new_array = array();
    $sortable_array = array();

    if (count($array) > 0) {
        foreach ($array as $k => $v) {
            if (is_array($v)) {
                foreach ($v as $k2 => $v2) {
                    if ($k2 == $on) {
                        $sortable_array[$k] = $v2;
                    }
                }
            } else {
                $sortable_array[$k] = $v;
            }
        }

        switch ($order) {
            case SORT_ASC:
                asort($sortable_array);
                break;
            case SORT_DESC:
                arsort($sortable_array);
                break;
        }

        foreach ($sortable_array as $k => $v) {
            $new_array[$k] = $array[$k];
        }
    }

    return $new_array;
}

Wie benutzt man

 $list = array(
   array( 'type' => 'suite', 'name'=>'A-Name'),
   array( 'type' => 'suite', 'name'=>'C-Name'),
   array( 'type' => 'suite', 'name'=>'B-Name')
 );

$list = array_sort($list, 'name', SORT_ASC);

array(3) { [0]=> array(2) { ["type"]=> string(5) "suite" ["name"]=> string(6) "A-Name"    } [2]=> array(2) { ["type"]=> string(5) "suite" ["name"]=> string(6) "B-Name" } [1]=> array(2) { ["type"]=> string(5) "suite" ["name"]=> string(6) "C-Name" } }

  • Das ist eine schrecklich komplizierte Lösung.

    – verzeihen

    22. September 2017 um 7:36 Uhr

  • @decez Hallo! Danke für Kommentar und Downvote. Könntest du deine Meinung belegen? Vielen Dank im Voraus.

    – voodoo417

    28. September 2017 um 18:44 Uhr

  • usort($mydata, function ($a, $b) { return strcmp($a['name'], $b['name']); }) – Da dies einwandfrei funktioniert, ja, würde ich sagen, dass Ihres zu kompliziert ist.

    – verzeihen

    28. September 2017 um 19:12 Uhr

  • @deceze ja, natürlich. Aber oben (meins) ist eine “üblichere” Lösung. Ich könnte sagen zB 100 Situationen (eigentlich unendlich) – wo meine Lösung ohne Änderungen funktioniert. Einzellösung. Sie werden 100 usort-Funktionen schreiben (dasselbe – eigentlich unendlich). Natürlich für einzigartige Situation – einzigartige Lösung. Es gibt nur eine “gemeinsame” Lösung. OK. Ich habe dich verstanden. Vielleicht schreibst du jedes Mal für jedes neue Projekt Klassen wie Response, Request, Controller etc. ?

    – voodoo417

    28. September 2017 um 21:16 Uhr


  • 1) Für einen so kurzen Einzeiler ist es gar nicht nötig, etwas Allgemeines zu schreiben, kaum vergleichbar mit der MVC-Infrastruktur. 2) Selbst für eine generische Funktion ist dies ziemlich kompliziert; siehe stackoverflow.com/a/22829326/476.

    – verzeihen

    29. September 2017 um 5:12 Uhr

1646255647 112 Sortieren Sie das mehrdimensionale PHP Array basierend auf dem Wert im
Ali Seyfollahi

Probieren Sie diese usort-Funktion aus:

    function cmp($a, $b){
        if ($a == $b)
            return 0;
        return ($a['name'] < $b['name']) ? -1 : 1;
    }

$my_array = array(
0 => array
    (
        'type' => 'suite'
        ,'name' => 'A-Name'
    )
,1 => array
    (
        'type' => 'suite'
        ,'name' => 'C-Name'
    )
,2 => array
    (
        'type' => 'suite'
        ,'name' => 'B-Name'
    )
);


usort($my_array, "cmp");

Wenn Sie es in einer Klasse verwenden, ändert sich der zweite Parameter in ein Array wie dieses:

usort($my_array, array($this,'cmp'));

  • Hat super funktioniert, danke.

    – B3keine

    20. Juli 2018 um 0:59 Uhr

  • uasort($my_array, function ($a, $b){ if ($a == $b) return 0; return ($a[‘name’] < $b['name']) ? -1 : 1; });

    – vikash

    22. Oktober 2019 um 8:47 Uhr


array_multisort() – Sortieren Sie mehrere oder mehrdimensionale Arrays

1646255647 202 Sortieren Sie das mehrdimensionale PHP Array basierend auf dem Wert im
Prateek Joshi

 <?php
$a=array(
array('a'=>5,'b'=>7),array('c'=>4,'d'=>2),array('e'=>0,'f'=>12)

    );
function cmp_sort($x,$y){           //your function to compare two keys
if($x===$y)
    return 0;
else
    return ($x<$y?1:-1);
}

uasort($a,'cmp_sort');    //call user-defined compare function
print_r($a);              //printing the sorted array


?>

Ausgabe =>

Reihe ( [2] => Anordnung ( [e] => 0 [f] => 12 ) [1] => Anordnung ( [c] => 4 [d] => 2 ) [0] => Anordnung ( [a] => 5 [b] => 7 ) )

1646255648 765 Sortieren Sie das mehrdimensionale PHP Array basierend auf dem Wert im
pawan sen

$this->aasort($array,"key");

function aasort (&$array, $key) {
    $sorter=array();
    $ret=array();
    reset($array);

    foreach ($array as $ii => $va) {
        $sorter[]=$va[$key];
    }

    arsort($sorter);

    foreach ($sorter as $ii => $va) {
        $ret[]=$array[$ii];
    }

    return $array=$ret;
}

1646255648 214 Sortieren Sie das mehrdimensionale PHP Array basierend auf dem Wert im
Mateus Pastori

Probieren Sie diesen rekursiven Modus aus, den ich in der Magento REST API verwendet habe:

$parameters = ['searchCriteria' => ['currentPage' => 1, 'pageSize' => 20]];
$parameters['searchCriteria']['filter_groups'][0]['filters'][0] = ['condition_type' => 'from', 'field' => 'updated_at', 'value' => '2017-01-01T00:00:00'];
$parameters['searchCriteria']['filter_groups'][1]['filters'][0] = ['condition_type' => 'to', 'field' => 'updated_at', 'value' => '2017-12-31T23:59:59']; 

function sortArrayByKeyAsc($_params){
    if(is_array($_params)){
        uksort($_params, 'strnatcmp');
        foreach ($_params as $key => $value){
            if(is_array($value)){
                $_params[$key] = sortArrayByKeyAsc($value);
            }
        }
    }
    return $_params;
}

916190cookie-checkSortieren Sie das mehrdimensionale PHP-Array basierend auf dem Wert im inneren Array? [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy