我幾乎要離開我了 - 我希望你能幫助;也許這很簡單,但我現在很困難。如何根據multidim數組在php中對multidim數組進行排序?
我有數組的下無序數組:
$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] =>))
(我並不想強調這一點,但請注意,在它周圍灑空值(=「」),它的意思。 )
另一個注意事項:在一些奇怪的情況下,有可能存在doublettes。在這個例子中確實存在:
...
[126] => Array ([pa_farbe] => black-default [pa_groesse] => l)
...
[149] => Array ([pa_farbe] => black-default [pa_groesse] => l)
...
我認爲提前回答'doublette問題'很重要。 )
-
現在,這種無序陣列上方需要根據以下數組進行排序,提供所有的值的期望的順序。我已經成功地使這個:
$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] =>))
(空值(=「」)被移動接近年底)
此外,我已經知道,有多少「尺寸」這樣的陣列將擁有和什麼是他們的 '名字',屬性:
$dim = 0;
$dim_names = array();
foreach ($unique_attribute_values as $attr => $val) {
$dim++;
$dim_names[$dim] = $attr;
}
...導致:
$dim = 2;
$dim_names = Array ([1] => pa_farbe
[2] => pa_groesse)
請注意:這個例子中的'維度'是2 - 但是維度可以從1變化到n(在實踐中n幾乎總是< 4)。但是由於它是未知的,我認爲確定維度並提供可用的名稱(=鍵)是一個好主意,可能爲未來的for-loop。 (?)
-
無論如何,我需要達到的效果是:
$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] =>))
注意,doublette是其正確的地方太多:[126]和[149]。
你會怎麼做? 我很欣賞任何建議!
非常感謝您提前!
夥計,我想是這樣!真棒! – Darkwing
我只需要對你的答案做一些小的改動,也許你可以在下面編輯它們: (1)需要定義'cmp'函數_before_它在uksort()中被調用。或者,可以使用uksort()的匿名函數 - 就像我現在所做的那樣。 (2)首先需要初始化'cmp'函數範圍中使用的全局變量,該範圍也是'全局'的_outside_。 然後它工作正常! (也許行爲取決於PHP版本?) (哦,並且:抱歉回答那種遲了,但是我的顯卡在發佈這個問題後決定在第二天早上死掉......) – Darkwing
看起來確實像你提到的問題是取決於具體的版本或者特定的設置。它在這裏運行良好:http://ideone.com/dx9DlO –