2012-10-12 140 views
0

他stackoverflow,如何使用foreach获取具有特定名称的所有GET元素

今天,我忙于一个函数女巫得到所有具有特定名称的元素。现在我遇到了一个创建这个函数的问题。具体名称的是动态的,所以不可能有: “conf_1 =数据& conf_2 =数据”,而且还 “conf_1 =数据& conf_2 =数据& conf_3 =数据”

一些代码来开导你,

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

因此,可以说,我们有这个URL,

NAAM =名称& DOM =域& ID = 41 & conf_1 =数据& conf_2 =数据& conf_3 =数据& this_1 = data & this_2 = opt1

现在我正在尝试使用foreach循环获取所有conf元素,但我需要$ a参数为1,2和3个数字。当我试图把所有的这元素美元的关闭给1带2

我如何声明,否则我怎么能做到这一点有不同的循环。下一步是的,当然把元素融入到这样一个数组:

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

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

重要的是,编号是不会自动完成。数组中关闭的数字是元素名称中的数字。基本上conf_1 =数据有可能成为[1] =>数据

据我所知,有多种方法可以做到这一点,但我不知道女巫是最好和最快的方式。我现在做的方式是完全错误的:

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

回答

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

它更接近一点,但它需要所有的得到的元素,然后当你使用$数据array_values($的数据);它给它自己做按键阵列,我想给数组名称的键。像这样:conf_1 =数据必须变成[1] =>数据。这就是存储在$ CONF变量 – botenvouwer

+0

@sirwilliam,很容易。当然..我会在一会儿更新代码 – Baba

+0

@sirwilliam是你想要的 – Baba

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

哼哼是看起来像它,但我如何过滤名称这种方式。你看到没有数字键。这些键看起来像conf_int = data而不是像int = data – botenvouwer

+0

数组$ conf将有像1 => data,2 => data等数据。难道你不想完成什么? – Abdussamad

+0

否,因为在某些情况下,编号的顺序不是逻辑,例如conf_1 = data&conf_3 = data&conf_2 = data。我需要代码来命令它,所以它成为一个逻辑顺序为 – botenvouwer

1

如果你是用表单提交(而不是用javascript例如),则可以更容易由“CONF”输入元件转换成一个数组。

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

提交后,这些将作为表单中的数组提供;

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

这个,如果你提交HTML表单仅仅是有帮助的。

+0

的数组这看起来像一个简单而好的解决方案我将测试这个并尝试将它与Baba,PS的答案进行比较我使用JQuery的ajax GET方法发送表单。这是一个问题吗? – botenvouwer

相关问题