我有两个数组,一个有ID,另一个有Names:
$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');
然后通过它来执行实际更新。有更好的主意吗?
更新:添加了上述可能的解决方案。与此同时,还有几个答案。
答案 0 :(得分:3)
如果不是特殊的ID,你可能只有array_combine这两个数组。以下是我认为解决问题的方法:
设置
$ids = array(4, 13, 6, 8, 10);
$names = array('alice', 'bob', 'charles', 'david', 'elizabeth');
$specialNameIndex = 2;
$specialId = 13;
解决方案
$result = array($specialId => $names[$specialNameIndex]);
unset($ids[array_search($specialId, $ids)],
$names[$specialNameIndex]);
$result += array_combine($ids, $names);
结果
print_r($result);
Array
(
[13] => charles
[4] => alice
[6] => bob
[8] => david
[10] => elizabeth
)
答案 1 :(得分:1)
您可以使用array_combine
然后设置/附加您的特殊值:
$mapped = array_combine($ids, $names);
$mapped[$special_id] = $names[$special_name];
答案 2 :(得分:0)
$ ids和$ names数组是否已同步? (4对应'alice'吗?)
for ($i=0; $i < count($ids); $i++) {
$indexed[$ids[$i]] = $names[$i]; // $indexed[4] = 'alice';
$indexed2[] = array ( $ids[$i] => $names[$i] ); // $indexed[0] = ( 4 => 'alice')
}
选择你最喜欢的
答案 3 :(得分:0)
由于您使用默认索引,因此可以在foreach()
上使用keys($ids)
来获取索引,以便您可以一次迭代两个数组。只需比较当前索引$ids
的值,并在适当时使用替代索引$names
。