2015-01-14 3 views
-2

Я ищу способ разместить несколько переменных в цикле foreach.Ограниченный 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 ", но одиозно это не самый эффективный способ сделать это.

+0

Итак, в чем вопрос сейчас? Вы хотите, чтобы НЕ проходили эти элементы массива? – Rizier123

+0

http://stackoverflow.com/a/184104/460557 –

+0

совет: '$ case_changed = array_map ('strtoupper', $ _POST);' –

ответ

0

я понял, довольно простой способ сделать это ...

$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); 

Это работает лучше всего, потому что я планирую положить это в базу данных, а для единообразия я желаю все это из одного массива.

0

Вы можете создать массив скрытых ключей:

$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 
    } 
} 
+0

То есть это означает, что нет, нельзя просто сказать в foreach заявление, что вы хотите использовать только $ posted [0-x] как $ raw ?? – ilarsona

+0

'$ _POST' - ассоциативный массив. Вам нужно указать либо ключи, которые вы хотите проверить, или те, которые вы не хотите проверять. См. Мой обновленный ответ. –

0

Возможно, вы могли бы попробовать что-то вроде этого:

$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, чтобы не создавать кучу переменных.

Смежные вопросы