我有一个包含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比较陌生。任何建议都将不胜感激。
答案 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);