我有以下代码。我想让它更简单,更简短。我创建了$data1
数组,用array_merge
添加了相关数据,并保存到我的模型中。但注意$data1
和$exists
内部有相同的代码。是否有可能将$data1
数组传递给MyModel的查找方法而不重写相同的代码?
因为我需要在这些代码片段中创建多行,所以我使用MyModel->create
。在这个代码中,我粘贴了两个块,但最初我有6个这样的块。所以缩短对我来说很重要。
总结:我需要缩短这个代码片段,我不想在每个块中重写相同的数据。
$usersNew=array("mike", "john");
$usersLost=array("anna", "maria");
$data1 = array('userid' => $userid,
'date' => date('Y-m-d')
);
foreach ($usersNew as $f) {
$data2 = array_merge($data1, array("users_new" => $f));
$exists=$this->MyModel->find('first',
array('conditions' => array(
'MyModel.userid' => $userid,
'MyModel.date' => date('Y-m-d'),
'MyModel.users_new' => $f
) ));
if ($exists == FALSE) {
$this->MyModel->create();
$this->MyModel->save($data2);
}
}
foreach ($usersLost as $f) {
$data2 = array_merge($data1, array("users_lost" => $f));
$exists=$this->MyModel->find('first',
array('conditions' => array(
'MyModel.userid' => $userid,
'MyModel.date' => date('Y-m-d'),
'MyModel.users_lost' => $f
) ));
if ($exists == FALSE) {
$this->MyModel->create();
$this->MyModel->save($data2);
}
}
对于代码的优化,也许这不是最好的问题。还有其他类似于SO的"兄弟",比如代码审查。我只是建议,因为也许你会在那里找到更好或更专门的答案。
但是,到目前为止。在这种情况下,我通常会做的是添加一个额外的数组,比如
$helper = array('usersNew'=>'users_new',
'usersLost'=>'users_lost',
/* name of array you want to loop => name of column in db */ );
这就像有一个数组的变量部分的代码。我使用的是你的代码,但如果你将来需要更复杂的东西,一个多维数组会更好。
那么,我们只执行一个foreach
然后遍历$helper
数组中的所有变量
$usersNew=array("mike", "john");
$usersLost=array("anna", "maria");
//I prefer to avoid merge performance, so I'm deleting this, though it works
/*$data1 = array('userid' => $userid,
'date' => date('Y-m-d')
);*/
foreach ($helper as $arrayName => $dbCondition) {
foreach ($$arrayName as $f) {
$data = array('userid' => $userid,
'date' => date('Y-m-d'),
$dbCondition => $f
);
$exists = $this->MyModel->find('first',
array('conditions' => array(
'MyModel.userid' => $userid,
'MyModel.date' => date('Y-m-d'),
'MyModel.'.$dbCondition => $f
) ));
if ($exists == FALSE) {
$this->MyModel->create();
$this->MyModel->save($data);
}
}
}
我还没有测试代码,但它应该没有修改,可能是我缺少的关闭}或类似的东西。
如果由于某种原因,这段代码给你带来了问题(我有时也会遇到这种情况)
$data = array('userid' => $userid,
'date' => date('Y-m-d'),
$dbCondition => $f
);
分两部分做
$data = array('userid' => $userid,
'date' => date('Y-m-d'),
);
$data[$dbCondition] = $f;
技巧在于双$$
(可变变量)和以适合您的方式组织$helper
数组。我希望我讲得够清楚了