2011-08-19 4 views
0

어리석은 질문처럼 보일지 모르지만 여러 POST 변수에서 배열을 만드는 데 문제가 있습니다. 그들은 많은 변수를 가질 수있는 jQuery 폼에서 왔습니다. 2 가지 옵션, 이름 또는 학교 중 하나가 될 수 있습니다. 예를 들어배열에 임의의 수의 POST 변수가 있습니다.

: $_POST['name1'], $_POST['school2'], $_POST['name3'], $_POST['name4']

변수의 최대 개수를 얻을 배열로 각각의 변수를 넣는 방법이 있는가? 아니면 이것을하는 더 좋은 방법이 있습니까?

모든 의견을 환영합니다.

foreach ($_POST as $key => $value) { 
    // parse key names/etc 
} 

이는 것 :

+4

'$ _POST'는 이미 배열입니다 .... 그 밖의 무엇을 원하니? 'name'과'school' 항목을 분리 하시겠습니까? –

+0

최대 변수 수는 얼마입니까? –

+0

extract()와 같은 것을 원하셨습니까? – Dan

답변

6
<input name="name[]" /> 
<input name="school[]" /> 
<input name="name[]" /> 
<input name="name[]" /> 

그게 무슨 뜻이야?

foreach ($_POST as $key => $val) 
{ 
    if (preg_match('/^name\d+$/',$key){ 
    // name variable 
    } else if (preg_match('/^school\d+$/',$key){ 
    // school variable 
    } 
} 
+0

예! 이게 내가 찾는거야. 감사합니다 :) – adamzwakk

+1

에 의해 .. 거기에 거의 아무것도 변수의 수에 대한 게시물이 없습니다. 하지만 당신 post_max_size로 실행할 수 있습니다 ... – Flask

+0

안녕하세요 @ 경우 게시물 변수 예 post_max_size로 실행할 수있는 엄청난 숫자입니다. 그러한 문제를 어떻게 처리 할 수 ​​있는지 제안 해주십시오. 우리는 아약스 방법을 사용하여 거대한 게시물 변수를 제출할 수 있습니까? 아약스를 사용하여 post_max_size 문제가 다시 실행됩니까? –

0

당신은 $_POST['name']

+0

name1, name2 등을 설정할 수 있습니다. 그러나 배열을 사용하면 응용 프로그램/데이터에 따라 더 많은 의미를 가질 수 있습니다. 예를 들어, 항상 address1, 2 및 3을 가지려는 경우 배열이 과도하게 사용됩니다. – Colin

+0

@ 콜린, 내가 할 수있는 한, 아마도 여기에 문제가 내 영어로있다. 희망은 지금 대답이 더 분명하다? – RiaD

+0

편집을 통해 좀 더 명확 해졌지만 정적으로 번호가 지정된 게시물 인수가 가장 좋지 않을 수도있는 것처럼 배열이 항상 최상의 솔루션이 아닐 수도 있습니다. – Colin

0

는 다음과 같은 사용할 수 있습니다 당신은 배열을 얻을 것이다 PHP이 경우 대신 name
의 변수의 이름으로 name[1] (또는 name[])을 설정할 수 있습니다 모든 게시물 인수를 거칠 수 있습니다. 그러나 잠재적 인 보안 위험이 있음을주의하십시오. 키/이름을 매우 신중하게 게시 할 것을 확인해야합니다 (항상 그래야합니다).

0

입력란 이름이 school[]name[] 인 양식을 제출해보십시오. 이것들은 적절하게 배열로 변환되어야합니다.

0
: 그럼, 현명한 참조 PHP Form Arrays, 당신은 지금 당신이 그들을 번호한다면 당신은 $ _POST 변수에 foreach 문을 사용할 수 있습니다, 대안 적으로 $_POST['name']에 대한 배열 및
foreach ($_POST['name'] as $name) 
{ 
    // each form element from the `name[]` inputs = $name 
} 
foreach ($_POST['school'] as $school) 
{ 
    // each form element from the `school[]` inputs = $name 
} 

$_POST['school']

count($_POST)을 호출하여 $_POST 배열의 요소를 계산할 수 있습니다.

그러나 예, jQuery를 통해 변수를 전달하는 더 나은 방법이있다 :

jQuery.post('/your/url/here', { 
    'name': ['Tom', 'Jerry', 'Garfield'], // passing array... 
    'school': ['MIT', 'UCLA', 'Florida State University'] // ...and another one 
}, function(data){ 
    // your callback here 
}); 

당신은 (PHP에서) 같은 데이터의 특정 부분 계산 할 수있을 것입니다 :

$number_of_names = count($_POST['name']); // $_POST is multidimensional array 
$number_of_schools = count($_POST['school']); 

또는 당신은 (여전히 PHP에서)를 표시 할 수 있습니다

echo 'names: ' . implode(', ',$_POST['name']) . PHP_EOL; 
echo 'schools: ' . implode(', ',$_POST['school']) . PHP_EOL; 

가 도움이나요?

0

나는 지금 당신이 의미하는 바를 얻었습니다.

$myNames = Array(); 
for($i=0; $i<1000; $i++){ 
if(!isset($_POST["school$i"])): 
    break; 
$myNames += $_POST["school$i"] 
} 
0

최선을 다 할 것입니다 폼에 입력을 변경 다른 사람들이 추천 한, : 그들은 다른 기본 기능

간단을 방해하지 않는

$options = Array("school" => Array(), "names" => Array()); 
$i = 0; 
foreach($options as $key => $val){ 
    while(isset($_POST[$key.$i]) && ++$i){ 
     $options[$key] += $_POST[$key.$i]; 
    } 
} 

형태의 배열은 더 나은 옵션이 될 수 있습니다. 어떤 이유로 든 실제로 가능하지 않다면 배열을 수동으로 만들어야합니다 :

$base_names = array('name' => array(), 'school' => array()); 
foreach ($_POST as $key => $value) { 
    $key = preg_replace('/\d+$/', '', $key); 
    if (isset($base_names[$key])) { 
     $base_names[$key][] = $value; 
    } 
} 
관련 문제