0

彼はスタックオーバーフロー、

今日、私は特定の名前のすべての要素を取得する関数で忙しいです。ここで、この関数の作成に1つの問題があります。特定の名前は動的であるため、「conf_1 = data&conf_2 = data」だけでなく、「conf_1 = data&conf_2 = data&conf_3=data」もあります。

あなたを啓発するためのいくつかのコード、

foreach($_GET as $key => $value) {
  $a++;
  if (strpos($key, "conf_$a") === 0) {
    $conf[$key] = $value;
  }
}

したがって、このURLがあるとしましょう。

naam = name&dom = domain&id = 41&conf_1 = data&conf_2 = data&conf_3 = data&this_1 = data&this_2 = opt1

ここで、foreachループを使用してすべてのconf要素を取得しようとしていますが、$aパラメーターを1,2en3の数値にする必要があります。そして、私がこのすべての要素を取り込もうとすると、$ashutは1en2を与えます。

どうすればそれを宣言できますか、または別のループでこれを行うにはどうすればよいですか。次のステップはもちろん、要素を次のような配列に配置することです。

 $conf = Array
        (
            [1] => data
            [2] => data
            [3] => data
        )

 $this = Array
        (
            [1] => data
            [2] => data
        )

番号付けが自動的に行われないことが重要です。配列shut内の番号は、要素名の番号です。基本的にconf_1=dataは[1]=>dataになる必要があります

これを行うには複数の方法があることを理解していますが、魔女が最善かつ最速の方法であるかどうかはわかりません。私が今それをしている方法は完全に間違っています:

for($a = 0; $a < 99; $a++){
    // Get all the data
    $conf = array();
    foreach($_GET as $key => $value) {
        if (strpos($key, "conf_$a") === 0) {
            $conf[$key] = $value;
        }
    }

    $finalconf = array();
    //order all data
    $finalconf[$a] = $conf['conf_' . $a];               

    print_r ($conf);
    print_r ($finalconf);
}
4

3 に答える 3

1

あなたが試すことができます

$list = array();
foreach($_GET as $key => $data)
{
    (strpos($key,"conf_") === 0) AND $list[ltrim(strstr($key,"_"),"_")] = $data ;
}
var_dump($list);

出力

array
  1 => string 'data' (length=4)
  2 => string 'data' (length=4)
  3 => string 'data' (length=4)
于 2012-10-12T10:08:51.447 に答える
1

(たとえばJavaScriptではなく)フォームを使用して送信する場合は、「conf」入力要素を配列に変換することで簡単に送信できます。

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

送信すると、これらはフォームの配列として利用可能になります。

$_GET['conf'] = array('foo', 'bar', 'baz')

これは、 htmlフォームを送信する場合にのみ役立ちます。

于 2012-10-12T10:31:30.193 に答える
0

このコードを試してください:

$conf = array();
function check( $key ) {
   if( preg_match( '/conf_([0-9]+)/i', $key, $matches ) ) {
        return $matches[ 1 ];
   } else {
        return false;
   }
}

foreach( $_GET as $key => $val ) {
   $index = check( $key ) ;
   if( $index !== false ) {
       $conf[ $index ] = $val;
  }
}
于 2012-10-12T10:21:36.437 に答える