Es gibt ein paar Möglichkeiten, diese Katze zu häuten. Alle meine Methoden wird die erwartete Ausgabe ...
Zuerst lassen Sie uns tun es ohne Umstrukturierung Array (Demo) produzieren:
$order=["XS","S","M","L","XL","2XL","3XL"]; // declare appropriate size order
$ArrayStock=[["L","XL","M"],["12","3","2"]];
// Order the first subarray:
uasort($ArrayStock[0],function($a,$b)use($order){
return (array_search($a,$order)>array_search($b,$order)?1:-1); // any unidentifed sizes will go to the front
});
// Sync the second subarray with first subarray:
$ArrayStock[1]=array_replace($ArrayStock[0],$ArrayStock[1]);
// Optionally re-index the keys:
$ArrayStock[0]=array_values($ArrayStock[0]);
$ArrayStock[1]=array_values($ArrayStock[1]);
Als nächstes habe ich ein paar Möglichkeiten zeigen werden dass Sie ein restrukturiertes Array manipulieren können. Es ist absolut nichts falsch an der Art, wie trincot seine geschrieben hat. Dies sind nur Alternativen, die ich mir ausgedacht habe ...
Ich stimme Trincot über die Verwendung von Größen als Schlüssel (weil sie eindeutig sein werden) und Lager zählt als Werte.So ist der erste Prozess ist, dass neue Array-Struktur zu erzeugen:
$ArrayStock=[["L","XL","M"],["12","3","2"]];
# 1 Einzeiler array_combine()
Ansatz:
$new_structure=array_combine($ArrayStock[0],$ArrayStock[1]);
// $new_structure = ['L'=>'12','XL'=>'3','M'=>'2']
# 2foreach()
Ansatz:
foreach($ArrayStock[0] as $i=>$size){
$new_structure[$size]=$ArrayStock[1][$i];
}
// $new_structure = ['L'=>'12','XL'=>'3','M'=>'2']
nun das neue Array zu sortieren, Sie uksort()
oder eine Reihe anderer Array-Funktionen/Schleifen mit Ihrem vorgegebenen Reihenfolge Array verwenden können:
$order=["XS","S","M","L","XL","2XL","3XL"]; // declare whatever appropriate sizes in order
# 1uksort()
mit array_search()
Ansatz:
uksort($new_structure,function($a,$b)use($order){
return (array_search($a,$order)>array_search($b,$order)?1:-1);
// any unidentified sizes will go to the front of the array
});
// keep in mind, this doesn't declare $result, it sorts $new_structure
# 2array_replace()
mit array_flip()
- array_intersect()
- array_keys()
Ansatz:
$result=array_replace( // replace values on matching keys
array_flip( // swap keys with values
array_intersect(
$order, // keep values from here
array_keys($new_structure) // that exist here
)
),
$new_structure); // use these elements for replace
// $result=['M'=>'2','L'=>'12','XL'=>'3'];
# 3foreach()
mit array_intersect()
-array_keys()
Ansatz:
// generate & iterate ordered array
foreach(array_intersect($order,array_keys($new_structure)) as $v){
$result[$v]=$new_structure[$v]; // build properly sorted array
}
// $result=['M'=>'2','L'=>'12','XL'=>'3'];
schließlich als Trincot gezeigt hat, Sie kann kehrt die sortierten Daten zurück in das Ausgangsformat mit einer weiteren ein- Liner:
$ArrayStock=[array_keys($result),array_values($result)];
können Sie nicht, weil für einige Stupi d Grund "Größe" ist Teil Ihres Arrays und kein Schlüssel –
ok, wie sortiere ich, wenn ich "Größe" und "Lager" lösche? so wie dieses $ ArrayStock = Array (Array ("L", "XL", "M"), ("12", "3", "2")); –
es assoziativ machen – Thielicious