一直试图找出做某事的最佳方法。我有以下
$inputParams = array();
if (isset($_POST["inputOne"]) && !empty($_POST["inputOne"])) {
$inputOne = $_POST["inputOne"];
array_push($inputParams, $inputOne);
}
if (isset($_POST["inputTwo"]) && !empty($_POST["inputTwo"])) {
$inputTwo= $_POST["inputTwo"];
array_push($inputParams, $inputTwo);
}
if (isset($_POST["inputThree"]) && !empty($_POST["inputThree"])) {
$inputThree= $_POST["inputThree"];
array_push($inputParams, $inputThree);
}
因此,因为并非所有输入都是必需的,所以我的数组可以有1,2或3个值。
然后我来到处理数组的部分,此刻我有类似
的东西$this->inputOne = $inputParams[0];
$this->inputTwo = $inputParams[1];
$this->inputThree = $inputParams[2];
显然这不是一个好方法,因为如果其中一个输入是空的(它们可以是),那么上面会抛出一个错误。如果它们存在,我需要将值分配给变量,那么最好的方法是什么呢?我在考虑一个foreach循环,但后来我不知道我对所分配的值有多少控制(如果只有inputOne和inputThree有数据,inputThree会被分配给变量2吗?)
更新
如果我有
$this->inputOne = (!empty($inputParams[0])) ? $inputParams[0] : 'no data';
$this->inputTwo = (!empty($inputParams[1])) ? $inputParams[1] : 'no data';
$this->inputThree = (!empty($inputParams[2])) ? $inputParams[2] : 'no data';
var_dump("Input One is " . $this->email);
var_dump("Input Two is " .$this->mobNumber);
var_dump("Input Three is " .$this->storeCode);
我填写inputOne和inputThree字段(给第二个字段没有数据),然后输出
string(37) "Input One is myemail@gmail.com"
string(19) "Input Two is ABC123"
string(22) "Input Three is no data"
因此输入三的数据已经输入到输入二。有没有办法阻止这种情况发生?
答案 0 :(得分:3)
您可以使用ternary operator
检查变量是否为空并分配。
仅在您知道数组中元素的数量时才会出现此问题,否则ARRAY
是您最好的朋友
$this->inputOne = (!empty($inputParams[0])) ? $inputParams[0] : '';
$this->inputTwo = (!empty($inputParams[1])) ? $inputParams[1] : '';
$this->inputThree = (!empty($inputParams[2])) ? $inputParams[2] : '';
<强>更新强>
您可以遍历$this
对象并检查具有“无数据”值的属性并删除这些属性。
foreach ($objects as $key => $value) {
if($objects->key == 'no data'){
unset($objects->key); // This will just remove that property.
}
}
答案 1 :(得分:2)
如果你有一个未知数量的输入值,那么不要为每个输入值使用单独的变量和字段,而是一直使用 arrays :
<input name="input[]">
<input name="input[]">
<input name="input[]">
<?php
if ($_POST) {
$this->inputs = array_filter($_POST['input']);
}
这就是你所需要的一切。给你一个包含尽可能多的输入值的数组,过滤掉空元素。
答案 2 :(得分:0)
仅举例:
if (isset($_POST["inputThree"]) && !empty($_POST["inputThree"])) {
$inputThree= $_POST["inputThree"];
}
else {
$inputThree = 0; //or some value which you want
}
array_push($inputParams, $inputThree);
答案 3 :(得分:0)
不是将输入元素作为inputOne
,inputTwo
和inputThree
传递,而是使用JSON对象将数据作为数组传递并在此处解析,以便将它们放在循环中以更优雅的方式处理这些数据。
请在此处参阅JSON.stringify:
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify
在这里参考json_decode: http://php.net/manual/en/function.json-decode.php
解码后,您可以将其作为数组处理,如
$inputParams = array();
$inputElems = json_decode($_POST['input_arr']);
foreach($inputElems as $Elem)
{
if (isset($Elem) && !empty($Elem)) {
array_push($inputParams, $Elem);
}