如何在数组中使用空值?

时间:2011-06-26 11:47:05

标签: php arrays

我一直试图缩短这段代码:

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'];
    }
}

新代码无效。它似乎(当然(?))因为如果我想检查它们是否为空的任何值,它们不会被放入数组中,因为数组不能保存空值?

如何缩短原始代码?

3 个答案:

答案 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']
        );
    }
}

此处$$namevariable 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所指出的,您需要修复数组定义。