I’m almost going out of my mind – I hope you can help; maybe it’s simple but I’m really stuck right now.
I have the following unordered array of arrays:
$variations_excerpt =
Array ( [4288] => Array ( [pa_farbe] => white-default [pa_groesse] => xl )
[128] => Array ( [pa_farbe] => black-default [pa_groesse] => s )
[130] => Array ( [pa_farbe] => black-default [pa_groesse] => xxl )
[4289] => Array ( [pa_farbe] => white-default [pa_groesse] => xxl )
[127] => Array ( [pa_farbe] => black-default [pa_groesse] => m )
[129] => Array ( [pa_farbe] => black-default [pa_groesse] => xl )
[4286] => Array ( [pa_farbe] => [pa_groesse] => )
[149] => Array ( [pa_farbe] => black-default [pa_groesse] => l )
[4287] => Array ( [pa_farbe] => white-default [pa_groesse] => s )
[126] => Array ( [pa_farbe] => black-default [pa_groesse] => l )
[4290] => Array ( [pa_farbe] => white-default [pa_groesse] => ) )
(I don’t want to emphasize this, but note that there are empty values (='') sprinkled around in it. It’s meant to be that way.)
Another note: in some odd situations there is a chance that doublettes do exist. In this example one does exist:
...
[126] => Array ( [pa_farbe] => black-default [pa_groesse] => l )
...
[149] => Array ( [pa_farbe] => black-default [pa_groesse] => l )
...
I think it’s important to answer the 'doublette question' in advance. ;)
—
Now, this unordered array above needs to be sorted according to the following array, providing the desired order of all the values. I already managed to make this:
$unique_attribute_values =
Array ( [pa_farbe] => Array ( [0] => black-default [1] => white-default [2] => )
[pa_groesse] => Array ( [5] => s [6] => m [7] => l [8] => xl [9] => xxl [10] => ) )
(The empty values (='') are shifted towards the end.)
Additionally I already know, how many 'dimensions' such an array will have and what are the 'names' of them, the attributes:
$dim = 0;
$dim_names = array();
foreach ($unique_attribute_values as $attr => $val) {
$dim++;
$dim_names[$dim] = $attr;
}
… resulting in:
$dim = 2;
$dim_names = Array ( [1] => pa_farbe
[2] => pa_groesse )
Please note: the 'dimensionality' in this example is 2 – but the dimensionality can vary from 1 to n (with n in praxis almost always < 4). But since it’s kind of unknown, I thought it’s a good idea to determine the dimensionality and have the names (=keys) available, maybe for a future for-loop. (?)
—
Anyway, the result I need to achieve is the following:
$ordered_excerpt =
Array ( [128] => Array ( [pa_farbe] => black-default [pa_groesse] => s )
[127] => Array ( [pa_farbe] => black-default [pa_groesse] => m )
[126] => Array ( [pa_farbe] => black-default [pa_groesse] => l )
[149] => Array ( [pa_farbe] => black-default [pa_groesse] => l )
[129] => Array ( [pa_farbe] => black-default [pa_groesse] => xl )
[130] => Array ( [pa_farbe] => black-default [pa_groesse] => xxl )
[4287] => Array ( [pa_farbe] => white-default [pa_groesse] => s )
[4288] => Array ( [pa_farbe] => white-default [pa_groesse] => xl )
[4289] => Array ( [pa_farbe] => white-default [pa_groesse] => xxl )
[4290] => Array ( [pa_farbe] => white-default [pa_groesse] => )
[4286] => Array ( [pa_farbe] => [pa_groesse] => ) )
Note that the doublette is on its right place too: [126] and [149].
How would you do it? I appreciate any suggestions!
Thank you very much in advance!