我有一個內部含有一些元素的數組,每個元素都有一個名稱和一個id。例如:對數組中的元素進行排序,以使某些具有一些任意定義的ID的元素先出現
Array
(
[0] => stdClass Object
(
[id] => 1
[name] => a
)
[1] => stdClass Object
(
[id] => 2
[name] => b
)
[2] => stdClass Object
(
[id] => 3
[name] => c
)
[3] => stdClass Object
(
[id] => 4
[name] => d
)
[4] => stdClass Object
(
[id] => 5
[name] => e
)
)
而且我想與他們做什麼,是讓在另一個數組來定義一些優選的元素,然後解決這一個讓那些「首選」的人將首先出現。
例如在這裏,如果我現在用戶說,他更喜歡用id的4,5,6,那麼應該導致本這些項目的訂單項目:
Array
(
[0] => stdClass Object
(
[id] => 4
[name] => d
)
[1] => stdClass Object
(
[id] => 5
[name] => e
)
[2] => stdClass Object
(
[id] => 1
[name] => a
)
[3] => stdClass Object
(
[id] => 2
[name] => b
)
[4] => stdClass Object
(
[id] => 3
[name] => c
)
)
4和5,現在首先出現,因爲他們是首選的,6實際上並不存在的事實沒有區別(它只是優先選擇,不是強制性的),其餘的則以後以無關順序列出。
現在,靜態,我知道我可以這樣做實現這一具體行爲:
usort($elements, function($a, $b) { return in_array($a->id, [4,5,6]) ? -1 : 1; });
這個工作,它與ID的4和5頂端的元素進行排序。但如果我想要那些[4,5,6]
在一個變量,因爲他們來自另一個來源(他們不是靜態的),那麼我不能做這個工作...定義它們在一個名爲$preferred
的數組中,然後使用global $preferred
函數調用的結果爲$preferred
的值爲NULL
。
這似乎很奇怪,因爲它似乎是一個明智的做法。
那我的選擇是什麼呢?
不使用全局。使用'use'。見例#3:http://php.net/manual/en/functions.anonymous.php –