我一直试图缩短这段代码:
if(empty($soort))
{
$error = 'ja';
$error_soort = 'ja';
$error_omschr_soort = $lang['error_no_entry'];
}
if(empty($klant_id))
{
$error = 'ja';
$error_klant_id = 'ja';
$error_omschr_klant_id = $lang['error_no_entry'];
}
if(empty($contact_id))
{
$error = 'ja';
$error_contact_id = 'ja';
$error_omschr_contact_id = $lang['error_no_entry'];
}
if(empty($aflever_id))
{
$error = 'ja';
$error_aflever_id = 'ja';
$error_omschr_aflever_id = $lang['error_no_entry'];
}
if(empty($klant_ref))
{
$error = 'ja';
$error_klant_ref = 'ja';
$error_omschr_klant_ref = $lang['error_no_entry'];
}
if(empty($materiaal))
{
$error = 'ja';
$error_materiaal = 'ja';
$error_omschr_materiaal = $lang['error_no_entry'];
}
if(empty($dikte))
{
$error = 'ja';
$error_dikte = 'ja';
$error_omschr_dikte = $lang['error_no_entry'];
}
这个简短的代码:
$check_empty = array($soort, $klant_id, $contact_id, $aflever_id, $klant_ref, $materiaal, $dikte);
foreach ($check_empty as $check)
{
if(empty($check))
{
$error = 'ja';
$error_check = 'ja';
$error_omschr_check = $lang['error_no_entry'];
}
}
新代码无效。它似乎(当然(?))因为如果我想检查它们是否为空的任何值,它们不会被放入数组中,因为数组不能保存空值?
如何缩短原始代码?
答案 0 :(得分:1)
您缺少键/变量名称。您可以只存储键/变量名称,而不是将变量值存储在数组中,从而能够识别空的键/变量:
$check_empty = array('soort', 'klant_id', 'contact_id', 'aflever_id', 'klant_ref', 'materiaal', 'dikte');
$errors = array();
foreach ($check_empty as $name) {
if (empty($$name)) {
$errors[] = array(
'name' => $name,
'desc' => $lang['error_no_entry']
);
}
}
此处$$name
是variable variable,其中$name
的值用于标识变量。由于错误存储在数组中,您可以通过检查$errors
是否为空来检查是否存在错误:
if (empty($errors)) {
// no errors
} else {
// errors
}
然后你甚至可以用foreach
迭代错误。
答案 1 :(得分:0)
简短的回答是:http://php.net/manual/en/language.variables.variable.php
如果这没有帮助,我会更新答案;)
答案 2 :(得分:0)
在您的特定情况下,您必须使用变量变量:
${"error_".$check} = 'ja';
${"error_omschr_".$check} = $lang['error_no_entry'];
然而,变量变量被认为是非常糟糕的做法。例如,以这种方式构建的变量无法使用phpDoc进行记录。此外,IDE的自动查找机制将失败。
使用数组要好得多:
// Earlier in the code
$error = array();
$error_omschr = array();
// In your loop
$error[$check] = "ja"; // you may want to use booleans instead
$error_omschr[$check] = $lang['error_no_entry'];
// later, for example....
foreach ($error as $key => $value)
{
if ($value == 'ja')
echo "Error: $key<br>";
}
另外,正如Gumbo和Felix Kling所指出的,您需要修复数组定义。