我有以下代码。我想让它更简单,更短。我创建了$data1
数组并使用array_merge
添加了相关数据并将其保存到我的模型中。但请注意,$data1
和$exists
内部具有相同的代码。是否可以将$data1
数组传递给MyModel的find方法而无需重写相同的代码?
由于我需要在这些代码段中创建多个行,因此我使用了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);
}
}
答案 0 :(得分:1)
为了优化代码,也许这不是最好的问题。还有其他“兄弟姐妹”,就像Code Review一样。我只是在暗示,因为也许你会在那里找到更好或更专注的答案。
但是,到了眼前。在这种情况下我通常做的就是有一个像这样的额外数组
$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;
技巧是双$$
(variable variables)并以适合您的方式组织$helper
数组。我希望我说得够清楚。