我想排序鍵名一個相當大的多維數組(不重視),但我也需要它是儘可能快的多維數組或生成的JSON。排序深受鍵名
生成的數組將被轉換爲JSON並保存在一個文件中,所以如果有辦法按鍵排序JSON,那就是我所需要的。
我有效地試圖找到PHP相當於蟒蛇的json.dumps(dict, sort_keys = True, indent = 4)
< - 的sort_keys選項。
我試過uksort($array, 'strnatcasecmp');
,但沒有在所有的工作,我也嘗試了一些其他的「定製」的解決方案,但沒有我想是足夠快和優雅。
此外,谷歌搜索「PHP深度排序多維數組按鍵/鍵名」結果什麼也沒有。每一個問題,根據關鍵在最後的標題排序需要按特定鍵的值排序...
有沒有什麼簡單快捷的方法來做到這一點?
這是這樣排列的一個簡單的例子
array(
'common' => array(
'zyu' => 'something',
'gka' => 'something',
'lfi' => 'something',
'abc' => 'something',
),
'data_result' => array(
'doc' => array(
66145 => array(
'lfk' => 'something',
'eks' => 'something',
'abc' => 'something'
),
34154 => array(
'lfk' => 'something',
'eks' => 'something',
'abc' => 'something'
)
),
'zus' => array(
// some data
),
'llo' => 'something',
'abc' => 'something'
),
'data_1' => array(
// Array with lots of values and another arrays inside
),
'post' => array(
'id' => 15525,
'time' => 156652363,
'something' => 'something'
)
);
這是我需要得到(你可以看到,每一個數組的鍵按字母順序排序):
array(
'common' => array(
'abc' => 'something',
'gka' => 'something',
'lfi' => 'something',
'zyu' => 'something',
),
'data_1' => array(
// Array with lots of values and another arrays inside
),
'data_result' => array(
'abc' => 'something'
'doc' => array(
34154 => array(
'abc' => 'something'
'eks' => 'something',
'lfk' => 'something',
)
66145 => array(
'abc' => 'something'
'eks' => 'something',
'lfk' => 'something',
),
),
'llo' => 'something',
'zus' => array(
// some data
),
),
'post' => array(
'id' => 15525,
'something' => 'something'
'time' => 156652363,
)
);
我試圖避免foreach循環和數組的重複,因爲數組非常大(生成的JSON文件有5500到7000行之間(有時甚至更多)),並且此操作將完成qui經常使用,我不想重載服務器,只是爲了讓JSON文件易於人類讀取和調試。
詩:我沒有創造這些陣列,其中大部分是由二進制文件,其中包含他們JSON格式的讀取。我只將它們組合到單個數組並對它們進行一些操作(添加一些自定義值等),然後將其另存爲JSON。
如果有什麼不清楚的地方(因爲這裏的3:35,我不在我的高峯期),發表評論,如有必要,我會編輯我的問題。
謝謝你的幫助。
謝謝,但是這是我試圖避免的,因爲該功能的執行需要+ - 0.01秒(從我的測試中,通常在'0.009605884552秒')和國際海事組織,這是一個非常長的時間加上我不知道它有多大的CPU負荷。這是唯一可能/最快的方法嗎? – MiChAeLoKGB
服務器端真的需要這個嗎?如果僅用於調試,則考慮在客戶端進行排序,即在JavaScript中進行排序。總有一種更好的方式,但我找不到它。 AFAIK,基本的快速排序算法是最好的。如果你真的需要在服務器端對數組進行排序,我可以給出的最好的建議是在C中實現上述函數(一個PHP擴展)。這將消除PHP函數調用開銷。啊,如果有很多空數組,檢查空虛將減少一些迭代:'if(is_array($ v)&& $ v){ksort_recursive($ a [$ k]); }'。 –
可以使用'RecursiveArrayIterator'來實現它。它可能會節省一些記憶,但我懷疑它會更快。 –