1

所以我是 Arrays 的新手,但我认为这应该很容易,我只是无法理解它。

我有一个数组,其中可以包含不同数量的键,具体取决于用户给出的输入量。

$array = MY_Class( array(
   'type' => 'representatives', 
   'show_this_many' => '10'
));

很容易,对吧?

但根据用户输入,我还有 1-4 个键。他们在第一页填写表格,然后提交到第二页(包含上面的数组)。

我需要根据用户在上一页填写的字段数来获取CityStateFirstlast 。我不能有空白的所以

$array = MY_Class( array(
   'type' => 'representatives', 
   'show_this_many' => '10',
   'city' => '',
   'state' => '',
   'first' => $_GET['first']
));

不会真的工作。我需要一种方法来确定已提交哪些字段(最好是通过GET)并以这种方式构建数组。所以最终可以

 $array = MY_Class( array(
   'type' => 'representatives', 
   'show_this_many' => '10',
   'state' => $_GET['state'],
   'first' => $_GET['first']
));

因为statefirst有值,而citylast没有。

首先想到的是

$array = MY_Class( array(
   'type' => 'representatives', 
   'show_this_many' => '10',
   $constants => $variables
));

//where
$constants = array( //_GET stuff values );
$variables = array( //_GET stuff with values );

// magic method to make it like
//  CONSTANTS[0] => VARIABLES[0];
//  CONSTANTS[1] => VARIABLES[1];
// so everything is lined up

但我不知道该怎么做:/

4

2 回答 2

2

您将需要使用可能的密钥白名单,$_GET这样您的阵列就不会被虚假(或可能是恶意)密钥污染,然后您可以简单地将它们附加到您的阵列上,并在$_GET.

// Your array is already initialized with some values:
$array = array(
  'type' => 'representatives', 
  'show_this_many' => '10' 
);

// Allowed GET keys
$allowed = array('city','state','first');

// Loop over get and add the keys (if allowed)
foreach ($_GET as $key => $value) {
  // If the key is allowed and the value isn't blank...
  if (in_array($allowed, $key) && !empty($value)) {
    $array[$key] = $value;
  }
}

// See all the newly added keys...
var_dump($array);

另一种选择是将所有键添加到数组中,然后调用array_filter()以删除空白。

$array = array(
  'type' => 'representatives', 
  'show_this_many' => '10',
  'city' => '', 
  'state' => '',
  'first' => ''
);
// Add values from $_GET, then filter it
$array = array_filter($array, function($val) {
  return $val !== '' && !is_null($val);
});
于 2012-09-29T02:52:09.243 回答
0

试试下面的代码

$array = array(
  'type' => 'representatives', 
  'show_this_many' => '10'
);

$fields = array ('city', 'state', 'first');

foreach ($fields as $field) {
  if (!empty($_GET[$field])) {
    $array[$field]  = $_GET[$field]
  }
}
于 2012-09-29T03:18:30.007 回答