在$ _POST

时间:2016-05-11 19:54:23

标签: php html

我有一个包含100个左右项目的数组。我正在从表格中的巨大清单中提取。用户检查的项目在提交后显示在下一页上。

我有项目显示,但也有几个逗号填充页面。毫无疑问,尚未填补的变量。

以下是一些代码片段,为您提供一般性的想法:

<!-- Front Underspoiler -->
<input type="checkbox" id="frontUnderspoiler" name="frontUnderspoiler" value="Front Underspoiler"> Front Underspoiler
<br>
<br>
<!-- Bumper Corner Moldings -->
<input type="checkbox" id="bumperCornerMoldings" name="bumperCornerMoldings" value="Bumper Corner Moldings"> Bumper Corner Moldings
<br>
<br>
<!-- Bumper Corner Molding-(2 PC) -->
<input type="checkbox" id="bumperCornerMoldingTwoPc" name="bumperCornerMoldingTwoPc" value="Bumper Corner Molding-(2 PC)"> Bumper Corner Molding-(2 PC)
<br>
<br>

这是每个项目的表单结构。提交表单后,用户将被重定向到下一页。以下是我的$_POST和数组的设置方式:

// ACCESSORIES
$allWeatherFloorMats = trim($_POST["allWeatherFloorMats"]);
$oneTenPowerOutlet = trim($_POST["oneTenPowerOutlet"]);
$frontLicPlateBrack = trim($_POST["frontLicPlateBrack"]);
$ashTray = trim($_POST["ashTray"]);
$ashTrayMountingSleeve = trim($_POST["ashTrayMountingSleeve"]);
$cigaretteLighter = trim($_POST["cigaretteLighter"]);
$sideSillPlates = trim($_POST["sideSillPlates"]);

将数据结构化为数组:

$accessoriesArray = array(
  '1' => $allWeatherFloorMats,
  '2' => $oneTenPowerOutlet,
  '3' => $frontLicPlateBrack,
  '4' => $ashTray,
  '5' => $ashTrayMountingSleeve,
  '6' => $cigaretteLighter,
  '7' => $sideSillPlates,
  '8' => $frontSideSillPlate,
  '9' => $strakeKit);

页面正文中的最后一位用逗号回显数组:

<?php echo implode(',',$accessoriesArray); ?>

这是我收到的内容:

  

您的车辆包括,,,,,,,,,,,,,,,,,,后保险杠贴花,,,侧窗偏转器,,,,,,,,,,,,,保险杠围嘴,,, Sunshade ,, Sport Grille Gunmetal Trim ,,,,,,,,,,,,, Tweeter Kit ,,,,,, Footwell Illumination Kit- Blue ,,,外部自动调光盲点检测,,,,,, ,,合金轮,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, < / p>

有没有办法在回显结果之前删除数组中导致逗号出现的项目?感谢您花时间检查一下。我对PHP比较陌生。任何建议都将不胜感激。

5 个答案:

答案 0 :(得分:4)

<?php echo implode(',', array_filter($accessoriesArray)); ?>

如果在没有第二个参数的情况下调用array_filter,则将删除所有等于FALSE的数组条目。 (空字符串转换为FALSE。)

答案 1 :(得分:3)

你有array_filter()的答案,但我会说你的代码是不必要的复杂。我会将复选框结构化为数据数组,如下所示:

name="data[]" value="Front Underspoiler"
name="data[]" value="Bumper Corner Moldings"
etc...

然后你只得到数据数组中的已检查的那些:

$accessoriesArray = $_POST['data'];

如果需要修剪那么:

$accessoriesArray = array_map('trim', $_POST['data']);

答案 2 :(得分:0)

您可以使用array_filter()并赋予您的数组和一个获取每个元素的函数,并通过返回true或{{1来决定该元素是否属于最终数组}}

该函数可以是作为字符串的函数名称,也可以是匿名函数(以​​及指向函数或类方法的任何其他“可调用”指针)。

false

答案 3 :(得分:0)

看起来你有一些空值。所以你可以这样做:

implode(',', array_filter($accessarray));

这将删除所有空值,请参阅此处以获取进一步的参考:http://php.net/manual/en/function.array-filter.php

答案 4 :(得分:0)

array_filter - 非常好的主意。 但这是错误的代码:

$accessoriesArray = array(
  '1' => $allWeatherFloorMats,
  '2' => $oneTenPowerOutlet,
  '3' => $frontLicPlateBrack,
  '4' => $ashTray,
  '5' => $ashTrayMountingSleeve,
  '6' => $cigaretteLighter,
  '7' => $sideSillPlates,
  '8' => $frontSideSillPlate,
  '9' => $strakeKit,);

你有数组,你有这个数组。 你需要过滤$ _POST并忽略空。

$result = [];
$keys = [
    'allWeatherFloorMats',
    'oneTenPowerOutlet',
    'frontLicPlateBrack',
    'ashTray',
    'ashTrayMountingSleeve',
    'cigaretteLighter',
    'sideSillPlates',
];
foreach($keys as $key)
{
    if(isset($_POST[$key]))
    {
        $_POST[$key] = trim($_POST[$key]);
        if(!empty($_POST[$key]))
        {
            $result[$key] = $_POST[$key];
        }
    }
}
echo implode(',', $_POST);