我有兩個陣列,一個用ID和一個與名稱:優雅的方式來兩個數組相互映射
$ids = array(4, 13, 6, 8, 10);
$names = array('alice', 'bob', 'charles', 'david', 'elizabeth');
我需要讓與IDS行具有名來更新數據庫在數組中。這裏是有點棘手:我也有兩個整數:
$special_name = 2; // the index in $names, in this case we mean 'charles'
$special_id = 13; // the id value
我不關心這名去哪個ID,除了與$special_name
名稱應走在$special_id
。
什麼是最優雅的方式到達那裏?所有我想到的方法似乎都很混亂。我認爲最好的是提取出每個陣列的特殊物品,並做那些第一,然後做休息,也許是建立一個新的數組是這樣的:
$mapped = new array();
$mapped[$special_id] = $names[$special_name];
foreach ($ids as $id) {
if ($id != $special_id) {
$mapped[$id] = current($names);
}
// advance $names pointer
$next_name = next($names);
if ($next_name == $special_name) next($names);
}
我沒有測試過但(我要),但它的意思產生類似:
$mapped = array(13=>'charles', 4=>'alice',6=>'bob', 8=>'david', 10=>'elizabeth');
,然後通過運行做實際的更新。有更好的主意嗎?
更新:添加上面的可能的解決方案。同時有幾個答案已經進來。
令人難以置信。我正準備發佈一行完全相同的解決方案,除了將2個參數傳遞給unset()。令人毛骨悚然的大聲笑 – goat 2010-02-24 20:18:34
@chris甚至具有相同的變量名稱? Oo:D – Gordon 2010-02-24 20:20:38
我也考慮過使用unset,但是array_combine放棄了我的想法。這感覺好一點。很酷,不知道你可以添加這樣的數組。謝謝。 – sprugman 2010-02-24 20:38:26