2015-06-17 3 views
-1

пытался найти лучший способ сделать что-то. У меня есть следующиеPHP, как получить данные из массива

$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]; 

Очевидно, что это не является хорошим способом сделать это, потому что если один из входов пуст (который они могут быть), то приведенное выше приведет к ошибке. Мне нужно присваивать значения переменной, если они существуют, так что каков был бы лучший способ сделать это? Я думал цикл Еогеасп, но тогда я не знаю, сколько контроля у меня есть над значением быть назначен (если только inputOne и inputThree есть данные, будут inputThree быть присвоено переменной 2?)

UPDATE

Если у меня есть

$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 [email protected]" 
string(19) "Input Two is ABC123" 
string(22) "Input Three is no data" 

Таким образом, данные из входных данных три были введены для ввода двух. Есть ли способ остановить это?

+0

Зачем нужно назначать три разных свойства '$ this -> ..'? Почему бы просто не держать его в массиве? Для неизвестного количества значений это именно то, для чего нужны массивы. – deceze

ответ

3

Пользователь может указать ternary operator, чтобы проверить, пусты ли ли переменные и назначить.

Ofocurse это для только если вы знаете количество элементов в массиве еще ARRAY ваш лучший друг

$this->inputOne = (!empty($inputParams[0])) ? $inputParams[0] : ''; 
$this->inputTwo = (!empty($inputParams[1])) ? $inputParams[1] : ''; 
$this->inputThree = (!empty($inputParams[2])) ? $inputParams[2] : ''; 

UPDATE:

Вы можете цикл через $this объект и проверить свойства, которые имеют значение «нет данных» и удаляют эти свойства.

foreach ($objects as $key => $value) { 
    if($objects->key == 'no data'){ 
    unset($objects->key); // This will just remove that property. 
    } 
} 
+0

Дайте мне две минуты, чтобы сделать обновление для op. Мне нравится этот ответ, хотя одна небольшая проблема. –

+0

уверен ... в чем проблема? – Abhinav

+0

Просто обновил исходное сообщение –

0

Просто для примера:

if (isset($_POST["inputThree"]) && !empty($_POST["inputThree"])) { 
    $inputThree= $_POST["inputThree"]; 
} 
else { 
    $inputThree = 0; //or some value which you want 
} 
array_push($inputParams, $inputThree); 
+0

'isset &&! Empty' - избыточная бессмыслица, используйте либо или. – deceze

+0

@deceze, если вы видите, я только что изменил код автора, чтобы достичь его цели. И я проголосовал за ваш ответ, потому что это правильный путь. – BSeitkazin

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); 
} 
+0

'isset &&! Empty' является избыточным. Также в вашем случае просто 'if ($ Elem)' будет делать то же самое. [Окончательное руководство к PHP iset И пусто] (http://kunststube.net/isset/) – deceze

2

Если вы имеют неизвестное количество входных значений, затем не работают с отдельными переменными и полями для каждого, но используют массивы полностью:

<input name="input[]"> 
<input name="input[]"> 
<input name="input[]"> 

<?php 
    if ($_POST) { 
     $this->inputs = array_filter($_POST['input']); 
    } 

Это все, что вам нужно. Дает вам массив с таким количеством входных значений, что и вы, с пустыми элементами, отфильтрованными.

Смежные вопросы