O que sua pergunta não é feita com frequência, pois você normalmente usaria
update()
definir muitos registros para ter os mesmos valores ou definir um registro para ter muitos valores diferentes. Uma maneira de contornar isso é agregar as atualizações, portanto, usando sua matriz, obtenha todos os ids em que o ano é 2011 e execute isto:
$where = array();
// This where should contain all the ids that need the year set to 2011
// E.g.
$where[] = array("id" => 3);
$db->update("table_name", array("year" => 2011), $where);
Isso reduzirá o número de consultas, supondo que você tenha muitas linhas com o mesmo ano. A documentação para isso está aqui .
Ou você pode usar um método assim
Editar após a resposta do OP
A própria natureza do problema significa que ele não pode ser resolvido com eficiência.
Você está pedindo uma maneira de atualizar 3.700 linhas de dados com conjuntos de dados muito diferentes. Se os conjuntos de dados forem diferentes, não há padrão que você possa explorar para tornar isso eficiente. Encontrar padrões, como linhas com o mesmo ano, e usá-los a seu favor aumentará a velocidade da consulta, mas exigirá algum envolvimento cerebral na forma de mashing de matrizes como observado por regilero.