0

他stackoverflow,

今天我忙于一个函数,它可以获取所有具有特定名称的元素。现在我在创建这个函数时遇到了一个问题。具体名称是动态的,因此可以是:“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,2 en 3 数字。当我尝试将所有这些元素 $a 关闭时,给出 1 和 2。

我该如何声明,或者如何使用不同的循环来做到这一点。下一步当然是将元素放入这样的数组中:

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

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

编号不是自动完成的,这一点很重要。数组中的数字关闭是元素名称中的数字。基本上 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 回答