[php] PHP로 POST를 통해 다차원 배열 제출
사용자가 필요에 따라 행을 추가 할 수 있기 때문에 알려진 수의 열 (예 : 상단 지름, 하단 지름, 패브릭, 색상, 수량)이 있지만 알 수없는 행 수가있는 PHP 양식이 있습니다.
각 필드 (열)를 가져 와서 자체 배열에 배치하는 방법을 발견했습니다.
<input name="topdiameter['+current+']" type="text" id="topdiameter'+current+'" size="5" />
<input name="bottomdiameter['+current+']" type="text" id="bottomdiameter'+current+'" size="5" />
그래서 내가 HTML에서 끝내는 것은 다음과 같습니다.
<tr>
<td><input name="topdiameter[0]" type="text" id="topdiameter0" size="5" /></td>
<td><input name="bottomdiameter[0]" type="text" id="bottomdiameter0" size="5" /></td>
</tr>
<tr>
<td><input name="topdiameter[1]" type="text" id="topdiameter1" size="5" /></td>
<td><input name="bottomdiameter[1]" type="text" id="bottomdiameter1" size="5" /></td>
</tr>
...and so on.
지금 제가하고 싶은 것은 모든 행과 열을 다차원 배열에 넣고 그 내용을 클라이언트에게 이메일로 보내는 것입니다 (가급적 형식이 좋은 테이블). 나는 모든 입력을 결합하고 멋진 배열로 선택하는 방법을 실제로 이해할 수 없었습니다.
이 시점에서 여러 1D 배열을 사용하는 것이 좋지만, 여러 1D 배열을 사용하는 것보다 단일 2D 배열을 사용하는 것이 더 나은 방법이라는 생각이 있습니다.
답변
제출시 다음과 같이 생성 된 것처럼 배열을 얻을 수 있습니다.
$_POST['topdiameter'] = array( 'first value', 'second value' );
$_POST['bottomdiameter'] = array( 'first value', 'second value' );
그러나 대신 양식 이름을이 형식으로 변경하는 것이 좋습니다.
name="diameters[0][top]"
name="diameters[0][bottom]"
name="diameters[1][top]"
name="diameters[1][bottom]"
...
이 형식을 사용하면 값을 반복하는 것이 훨씬 쉽습니다.
if ( isset( $_POST['diameters'] ) )
{
echo '<table>';
foreach ( $_POST['diameters'] as $diam )
{
// here you have access to $diam['top'] and $diam['bottom']
echo '<tr>';
echo ' <td>', $diam['top'], '</td>';
echo ' <td>', $diam['bottom'], '</td>';
echo '</tr>';
}
echo '</table>';
}
답변
다음과 같은 이름으로 모든 매개 변수를 제출할 수 있습니다.
params[0][topdiameter]
params[0][bottomdiameter]
params[1][topdiameter]
params[1][bottomdiameter]
나중에 다음과 같이합니다.
foreach ($_REQUEST['params'] as $item) {
echo $item['topdiameter'];
echo $item['bottomdiameter'];
}
답변
단일 GET 또는 POST 값뿐만 아니라 배열을 처리하는 함수를 만들었습니다.
function subVal($varName, $default=NULL,$isArray=FALSE ){ // $isArray toggles between (multi)array or single mode
$retVal = "";
$retArray = array();
if($isArray) {
if(isset($_POST[$varName])) {
foreach ( $_POST[$varName] as $var ) { // multidimensional POST array elements
$retArray[]=$var;
}
}
$retVal=$retArray;
}
elseif (isset($_POST[$varName]) ) { // simple POST array element
$retVal = $_POST[$varName];
}
else {
if (isset($_GET[$varName]) ) {
$retVal = $_GET[$varName]; // simple GET array element
}
else {
$retVal = $default;
}
}
return $retVal;
}
예 :
$curr_topdiameter = subVal("topdiameter","",TRUE)[3];
$user_name = subVal("user_name","");