2012-10-12 2 views
0

He 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을 가지고 말할 수,

나암 = 이름 & DOM = 도메인 & ID = 41 & conf_1의 = 데이터 & conf_2의 = 데이터 & conf_3의 = 데이터 & this_1 = data & this_2 = opt1

이제 foreach 루프를 사용하여 모든 conf 요소를 가져 오려고하지만 1,2 $ 3 매개 변수로 $ a 매개 변수가 필요합니다. 그리고이 모든 요소를 ​​가져 가려고 할 때 $ 1을주고 닫습니다.

다른 루프에서 어떻게 또는 어떻게 선언 할 수 있습니까? 다음 단계는이 같은 배열에 요소를 넣어의 코스이다 : 번호가 자동으로 수행되지 않는 것이 중요하다

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

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

. 배열의 번호는 요소의 이름에있는 숫자입니다. 기본적으로 conf_1 = 데이터는 [1] => 데이터가 되어야만합니다.

나는 여러 가지 방법으로이 작업을 수행 할 수 있음을 알고 있지만 마녀가 가장 빠르고 가장 좋은 방법이라는 것을 알고 있습니다. 당신이 경우

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

답변

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

조금 더 가까워 지지만 모든 get 요소를 취한 다음 $ data array_values ​​($ data)를 사용할 때; 그것은 자신이 만든 키 배열을 제공하고 배열에 키의 키를주고 싶습니다. conf_1 = data는 [1] => data가되어야합니다. 그리고 그것은 물론 $ conf 변수 – botenvouwer

+0

@sirwilliam에 저장됩니다.나는 순간에 코드를 업데이트 할 것이다. – Baba

+0

@ suirwilliam은 당신이 원하는 것이다. – Baba

0

이 코드를하려고 시도 할 수 있습니다 : 내가 지금 뭐하는 거지 방법은 완전 잘못된 것입니다 양식 제출 (자바 스크립트가 아닌) 예를 들어, "conf"입력 요소를 배열로 변환하면 더 쉽게 만들 수 있습니다.

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

제출하면 양식의 배열로 사용할 수 있습니다. 당신이 HTML 양식를 제출하는 경우

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

에만 도움이됩니다.

+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

:

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

이것은 좋고 쉬운 해결책처럼 보입니다. 이것을 테스트하고 Baba, PS의 답변과 비교해 봅니다. JQuery의 ajax GET 메소드를 사용하고 있습니다. 양식을 보내십시오. 이게 문제 야? – botenvouwer

관련 문제