PHP如何从数组中获取数据

时间:2015-06-17 08:53:58

标签: php arrays

一直试图找出做某事的最佳方法。我有以下

$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"

因此输入三的数据已经输入到输入二。有没有办法阻止这种情况发生?

4 个答案:

答案 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)

不是将输入元素作为inputOneinputTwoinputThree传递,而是使用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);
}