【问题标题】:Limited Foreach? [closed]有限的Foreach? [关闭]
【发布时间】:2015-01-14 01:18:48
【问题描述】:

我正在寻找一种仅将几个变量放入 foreach 循环的方法。

基本上,我正在寻找空值,并使用 die 告诉用户返回并填写表格。

这是我的数组:

$posted = array(
$sales_rep = strtoupper($_POST['sales_rep']),
$c_first_name = strtoupper($_POST['c_first_name']),
$c_last_name = strtoupper($_POST['c_last_name']),
$c_address = strtoupper($_POST['c_address']),
$c_zip = strtoupper($_POST['c_zip']),
$deal_number = strtoupper($_POST['deal_number']),
$deal_stock_number = strtoupper($_POST['deal_stock_number']),
$deal_selling_model = strtoupper($_POST['deal_selling_model']),
$deal_trade_in_model_1 = strtoupper($_POST['deal_trade_in_model_1']),
$deal_trade_in_amount_1 = strtoupper($_POST['deal_trade_in_amount_1']),
$deal_trade_in_model_2 = strtoupper($_POST['deal_trade_in_model_2']),
$deal_trade_in_amount_2 = strtoupper($_POST['deal_trade_in_amount_2']),
$deal_new_status = strtoupper($_POST['deal_new_status']),
$deal_dh = strtoupper($_POST['deal_dh']),
$deal_finance_amount = strtoupper($_POST['deal_finance_amount']),
$deal_pack = strtoupper($_POST['deal_pack']),
$deal_retro = strtoupper($_POST['deal_retro']),
$deal_holdback = strtoupper($_POST['deal_holdback']),
$deal_reserve_amount = strtoupper($_POST['deal_reserve_amount']),
$deal_warrantee = strtoupper($_POST['deal_warrantee']),
$deal_gap = strtoupper($_POST['deal_gap']),
$deal_etch = strtoupper($_POST['deal_etch']),
$deal_maintenence = strtoupper($_POST['deal_maintenence']),
$deal_gross = strtoupper($_POST['deal_gross'])
);

然而,最后几个不能进入,因为它们在表单中隐藏,除非用户这么说(它们可以为空):

$deal_reserve_amount = strtoupper($_POST['deal_reserve_amount']),
$deal_warrantee = strtoupper($_POST['deal_warrantee']),
$deal_gap = strtoupper($_POST['deal_gap']),
$deal_etch = strtoupper($_POST['deal_etch']),
$deal_maintenence = strtoupper($_POST['deal_maintenence']),
$deal_gross = strtoupper($_POST['deal_gross'])

我知道使用 if 可能有一种方法可以做到这一点,但我试图避免使我的代码混乱,并且我正在寻找一种非常简洁的方法来做到这一点,也许在 foreach 本身中。

我的问题:是否可以在 foreach 语句中说只放入几个变量? (为了限制我在数组末尾留出的那些)

如果这不起作用,我可能会运行一个 Javascript 函数来填充这些值,以实际说出类似于“NULL”的内容,但遗憾的是,这不是最有效的方法。

【问题讨论】:

  • 那么现在的问题是什么?你不想遍历这些数组元素吗?
  • 提示:$case_changed = array_map ('strtoupper', $_POST);

标签: php foreach


【解决方案1】:

也许你可以试试这样的:

$variables = array ("c_first_name", "c_last_name" /* etc. */);
foreach ($variables as $v)
{
    if (isset ($_POST[$v]))
    {
        $posted[] = $$v = $_POST[$v];
    }
    else
    {
        // scold the user for not having set the variable
    }
}

话虽如此,我宁愿将表单封装在一个 PHP 类中,以避免创建一堆变量。

【讨论】:

    【解决方案2】:

    您可以创建一个隐藏键数组:

    $hidden = array('deal_maintenence', 'deal_gross');
    

    然后您可以遍历$_POST 数组并检查该键是否为隐藏键:

    foreach ($_POST as $key => $value) {
        if (!in_array($key, $hidden)) {
            if (!empty($_POST[$key])) {
                // valid
            } else {
                // invalid
            }
        }
    }
    

    或者您可以通过指定要验证的键来执行其他方式:

    $keys = array('sales_rep', 'c_first_name', 'c_last_name');
    
    foreach ($keys as $key) {
        if (isset($_POST[$key]) && !empty($_POST[$key])) {
            // valid
        } else {
            // invalid
        }
    }
    

    【讨论】:

    • 那么这是否意味着不,不可能在foreach语句中简单地说您只想将$posted[0-x]用作$raw??
    • $_POST 是一个关联数组。您需要指定要验证的密钥或不想验证的密钥。请参阅我的更新答案。
    【解决方案3】:

    我想出了一个非常简单的方法......

    $v_info = array(  // V being visible
    $sales_rep = strtoupper($_POST['sales_rep']),
    $c_first_name = strtoupper($_POST['c_first_name']),
    $c_last_name = strtoupper($_POST['c_last_name']),
    $c_address = strtoupper($_POST['c_address']),
    $c_zip = strtoupper($_POST['c_zip']),
    $deal_number = strtoupper($_POST['deal_number']),
    $deal_stock_number = strtoupper($_POST['deal_stock_number']),
    $deal_selling_model = strtoupper($_POST['deal_selling_model']),
    $deal_trade_in_model_1 = strtoupper($_POST['deal_trade_in_model_1']),
    $deal_trade_in_amount_1 = strtoupper($_POST['deal_trade_in_amount_1']),
    $deal_trade_in_model_2 = strtoupper($_POST['deal_trade_in_model_2']),
    $deal_trade_in_amount_2 = strtoupper($_POST['deal_trade_in_amount_2']),
    $deal_new_status = strtoupper($_POST['deal_new_status']),
    $deal_dh = strtoupper($_POST['deal_dh']),
    $deal_finance_amount = strtoupper($_POST['deal_finance_amount']),
    $deal_pack = strtoupper($_POST['deal_pack']),
    $deal_retro = strtoupper($_POST['deal_retro']),
    $deal_holdback = strtoupper($_POST['deal_holdback'])
    );
    $nv_info = array( // NV being not visible
    $deal_reserve_amount = strtoupper($_POST['deal_reserve_amount']),
    $deal_warrantee = strtoupper($_POST['deal_warrantee']),
    $deal_gap = strtoupper($_POST['deal_gap']),
    $deal_etch = strtoupper($_POST['deal_etch']),
    $deal_maintenence = strtoupper($_POST['deal_maintenence']),
    $deal_gross = strtoupper($_POST['deal_gross'])
    );
    foreach ($v_info as $raw) {
    if ($raw == null) {
        die("Please fill in all the required elements in the form. ");
    }
    }
    $merged_arrays = array_merge($v_info, $nv_info);
    

    这种方法效果最好,因为我计划将它放入数据库中,并且为了保持一致性,我希望它全部来自一个数组。

    【讨论】:

      猜你喜欢
      • 2010-12-12
      • 1970-01-01
      • 2015-04-10
      • 2012-11-13
      • 1970-01-01
      • 1970-01-01
      • 2011-04-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多