我有两个阵列,一个用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