微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从表单中清除数组元素

如何解决从表单中清除数组元素

| 我有一个使用输入来创建和排列的表单。输入不是全部必需的,但至少需要一个
<form method=\"post\" action=\"process.PHP\">
    <input type=\"text\" name=\"MAC[]\" maxlength=\"12\" />
    <input type=\"text\" name=\"MAC[]\" maxlength=\"12\" />
    <input type=\"text\" name=\"MAC[]\" maxlength=\"12\" />
    <input type=\"text\" name=\"MAC[]\" maxlength=\"12\" />
    <input class=\"submitbg\" type=\"submit\" value=\"Register\" name=\"submit\"/>
 </form>
现在在process.PHP上,我要遍历数组,删除两种类型的特殊字符
:
;
,然后将其全部大写,并确认只有12个字符,然后序列化错误
$my_array = $_POST[\'MAC\'];
foreach ($my_array as $val){
    $val = strtoupper($val);
    $val = str_replace(\";\",\"\",$val);
    $val = str_replace(\":\",$val);
    $val = trim($val);
    if (strlen($val) != 12)){
        $valid = false;
        $error = \"Your MAC address is not 12 characters long\";
    }
}
$mac_addresses = serialize($my_array);

// if valid is not false do something with the cleaned up array.
问题: 我的foreach循环会将更新后的值保存回数组吗? 如何检查以确保至少有一个数组值?     

解决方法

问题是什么? 你可以做
str_replace(array(\';\',\':\'),\'\',$val);
通常,在对同一变量进行其他处理之前,最好先加5英镑,这是因为处理最终要削减的数据会涉及开销 如果您停止执行一个错误,则考虑对错误使用“ 6”。 您实际上并未对ѭ7进行任何更新。 考虑做:
foreach($my_array as &$val)
您通过引用传递,因此对$ val的所有更新都发生在实际数组中。要么:
foreach($my_array as $key=>$val){
    $my_array[$key]=trim($my_array[$key]);
您也可以尝试为清理后的数据创建一个新阵列,然后覆盖旧阵列。这完全取决于需求。     ,  我只是不确定我的foreach循环是否每次都会更新并重新保存值 如果要保存值,则应更改循环,使其看起来像这样:
foreach ($my_array as $idx => $val) {
  ...
  $my_array[$idx] = $val;
}
当然,您也可以将适当的值保存到单独的干净数组中,然后将其在应用程序中进一步使用。   我还必须检查以确保至少有一个条目。 从理论上讲,您不必检查数组是否包含要在foreach中使用该数组的元素。不过,您需要检查的是变量是否包含数组。假设未将“ 11”字段提交给服务器,则您首先会得到警告(如今也可能是错误),因为您正在查找数组中不存在的索引。其次,ѭ12在数组(或任何可遍历的数组)上工作时会出错。您可以通过以下检查来解决此问题:
if (!empty($_POST[\'MAC\'])) {
  $my_array = $_POST[\'MAC\'];
  if (!is_array($my_array)) {
    // throw some error.
  }
}
当然,您可能希望通过提供一个可以提供验证规则和一些输入的验证框架,以更结构化的方式对输入进行验证,然后验证框架将为您处理验证,最重要的是为您提供错误消息。 实际上,也可以将最后的“ 14”声明更改为:
if (!is_array($my_array) && !($my_array instanceof Traversable))
那就是如果您要确保$ my_array包含可以用
foreach
遍历的内容。令人讨厌的一点是,内置的array()不是
Traversable
,尽管可以理解,但令人讨厌。     ,我也不太了解您的问题。 但是,查看您的代码,您可能会感觉到最终您发布的var没有任何反应。 你是对的! :-) 脚本末尾的清理数组就是原始数组。 您可能想要实现以下目标:如果干净数组包含12个字符,则它们将包含干净值。
$my_array = $_POST[\'MAC\'];
$my_clean_array = $_POST[\'MAC\'];
foreach ($my_array as $val) {
        $val = strtoupper($val);
        $val = str_replace(\";\",\"\",$val);
        $val = str_replace(\":\",$val);
        $val = trim($val);
        if (strlen($val) != 12)) {
            $valid = false;
            $error = \"Your MAC address is not 12 characters long\";
        }
        else {
            $my_clean_array[] = $val;
        }
}
$mac_addresses = serialize($my_clean_array);
    ,要检查是否至少有一个,您应该可以使用
if(count($my_array) > 1)
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。