1

だから私は配列に慣れていませんが、これはかなり簡単だと思います。頭を包むことはできません。

ユーザーが入力した量に基づいて、さまざまな量のキーを含めることができる配列があります。

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

簡単ですよね?

しかし、ユーザー入力に基づいて、そこにある可能性のあるキーがさらに1〜4個あります。最初のページでフォームに記入し、2 番目のページ (上記の配列を含む) に送信します。

前のページでユーザーが入力したフィールドの数に基づいて、 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);

もう 1 つのオプションは、すべてのキーを配列に追加してから、 を呼び出し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 に答える