2011-12-10 3 views
2

$ _POST를 통해 많은 요소를받는 양식을 처리하고 있습니다. 이들의 특정 수 (너무 큰 숫자가 수작업 쓰기) 패턴 다음과 같습니다

$_POST['city_1'] 
$_POST['city_2'] 
$_POST['city_3'] 
$_POST['city_4'] 

등 양식이 설정되어

방법을 잘 모르겠어요 같은 얼마나 많은 요소 보내질 것입니다. 하나 일 수도 있고, 50 일 수도 있습니다. $ _POST 요소 중 이름을 기반으로 몇 가지 요소 만 처리 할 수 ​​있습니까?

답변

3

대신 다차원 배열을 만들어야합니다. 다음과 같이 할 수

귀하의 HTML 양식 필드 : PHP 코드에서

<input type="text" name="cities[city_1]"> 
<input type="text" name="cities[city_2]"> 
<input type="text" name="cities[city_3]"> 
<input type="text" name="cities[city_4]"> 

할 수 있습니다 다음 $_POST['cities']에 액세스하여 도시를 통해 루프 :

foreach($_POST['cities'] as $city) 
{ 
    echo $city; 
} 
+0

http://www.php.net/manual/en/faq.html.php#faq.html.arrays – goat

+0

아 난 도망이의 아니었다! 감사합니다. 이것은 많은 것을 단순화합니다 ... – delwin

0

$ _POST를 배열처럼 반복 할 수 있습니다.

foreach($_POST as $key=>$value) { 
    //filter based on $key 
} 
3
$cities = preg_grep('/^city_\d+$/', array_keys($_POST)); 

foreach($cities as $city) { 
    echo $_POST[$city]; 
} 

또는

foreach($_POST as $name=>$value) { 
    if (strpos($value, 'city_') !== 0) continue; 

    echo $value; 
} 
1

'fo 도달 (reach) '은 배열의 모든 요소를 ​​반복합니다. 그런 다음 요구 사항이 충족되는지 확인하십시오.

foreach($_POST as $key => $value) 
    if(preg_match("/^city_\d+$/", $key)) 
     ... 
1
function startsWith($haystack, $needle) 
{ 
    $length = strlen($needle); 
    return (substr($haystack, 0, $length) === $needle); 
} 


foreach ($_POST as $k=>$v) 
{ 
    if (startsWith($k, 'city_') 
    { 
    // Process parameter here ... 
    } 
} 
관련 문제