2016-12-26 1 views
1

Ich muss etwas mit Array tun und kann nicht herausfinden, wie. Ich habe dieses Array:ändern Array-Struktur am besten auf speziellen Schlüssel in PHP

$arr = array(
     "0" => array("var_id" => 11, "var_name" => 'london', "var_price" => 250), 
     "1" => array("var_id" => 22, "var_name" => 'moscow', "var_price" => 320), 
     "2" => array("var_id" => 33, "var_name" => 'chicago', "var_price" => 99), 
     "3" => array("var_id" => 11, "var_name" => 'london', "var_price" => 140), 
     "4" => array("var_id" => 44, "var_name" => 'amsterdam', "var_price" => 555), 
     "5" => array("var_id" => 33, "var_name" => 'chicago', "var_price" => 663), 
     "6" => array("var_id" => 33, "var_name" => 'chicago', "var_price" => 777) 
    ); 

ich will ich mit nur vier wichtigsten Städten neue Array müssen in diesem Beispiel Arraystruktur in der Lage sein zu ändern: London, Moskau, Chicago, Amsterdam der eindeutige Schlüssel wird var_id und innen werden ihnen die Reihe von Preisen wie folgt:

$arr_new = array(
    "0" => array("var_id" => 11, "var_name" => 'london', "var_price" => array("0" => 250,"1" => 140)), 
    "1" => array("var_id" => 22, "var_name" => 'moscow', "var_price" => array("0" => 320)), 
    "2" => array("var_id" => 33, "var_name" => 'chicago', "var_price" => array("0" => 99,"1" => 663,"2" => 777)), 
    "3" => array("var_id" => 44, "var_name" => 'amsterdam', "var_price" => array("0" => 555)) 
); 

Wenn es eine PHP-Klasse oder Funktion gibt, die es tun kann (ich bevorzuge Klasse). ist dies ein guter Screenshot i gemacht:

my arrays dbug

+0

Nein, es ist nicht etwas vorgefertigt. Aber Sie können dies leicht selbst mit einer Schleife erreichen. –

+0

Blick in Array_SORT – Chris

+0

So etwas wie https://3v4l.org/5Q5Qg –

Antwort

1

Sie es foreach Schleife wie diese verwenden können:

array:4 [ 
    0 => array:2 [ 
    "var_id" => 11 
    "var_price" => array:2 [ 
     0 => 250 
     1 => 140 
    ] 
    ] 
    1 => array:2 [ 
    "var_id" => 22 
    "var_price" => array:1 [ 
     0 => 320 
    ] 
    ] 
    2 => array:2 [ 
    "var_id" => 33 
    "var_price" => array:3 [ 
     0 => 99 
     1 => 663 
     2 => 777 
    ] 
    ] 
    3 => array:2 [ 
    "var_id" => 44 
    "var_price" => array:1 [ 
     0 => 555 
    ] 
    ] 
] 
    :

    $array = array(
        "0" => array("var_id" => 11, "var_name" => 'london', "var_price" => 250), 
        "1" => array("var_id" => 22, "var_name" => 'moscow', "var_price" => 320), 
        "2" => array("var_id" => 33, "var_name" => 'chicago', "var_price" => 99), 
        "3" => array("var_id" => 11, "var_name" => 'london', "var_price" => 140), 
        "4" => array("var_id" => 44, "var_name" => 'amsterdam', "var_price" => 555), 
        "5" => array("var_id" => 33, "var_name" => 'chicago', "var_price" => 663), 
        "6" => array("var_id" => 33, "var_name" => 'chicago', "var_price" => 777) 
    ); 
    
    $final_arr = []; 
    
    foreach ($array as $key => $arr) { 
        $final_arr[$arr['var_name']]['var_name'] = $arr['var_name']; 
        $final_arr[$arr['var_name']]['var_id'] = $arr['var_id']; 
        $final_arr[$arr['var_name']]['var_price'][] = $arr['var_price']; 
    } 
    
    var_dump(array_values($final_arr)); 
    

    Die erwartete Ausgabe so sein würde

  • See code in action
  • See it in different PHP Versions
+0

_Hinweis: _ Implizites Erstellen von Arrays wie die letzte Zeile wird in PHP 7.1 fehlschlagen, wo Sie es explizit als Array festlegen müssen, bevor Sie Elemente dorthin schieben können. –

+0

@MagnusEriksson - Es wird nicht fehlschlagen, Sie können Code in Aktion Link von der Antwort sehen und wählen Sie PHP Version 7.1 dort und führen Sie den Code! –

+0

Ah, ja. Es kann nur sein, wenn Sie es auf eine leere Zeichenfolge tun, es einen schwerwiegenden Fehler stattdessen bei dem Konvertieren in ein Array wie es verwendet, zu es auslöst. –

Verwandte Themen