php 배열 출력
본문
$arr=array(
"a"=>"aa",
"b"=>"ba",
"c"=>array("x","y","z"));
$arr_cnt = count(max(array_values($arr)));
echo "<table border=1>";
echo "<tr>";
foreach($arr as $key=>$val) {
if(is_array($arr[$key])) {
foreach($val as $key1=>$val1) {
echo "<td> {$val1} </td>";
}
}else {
echo "<td> {$val} </td>";
for($i=0; $i<$arr_cnt-1; $i++) {
echo "<td>0</td>";
}
}
echo "</tr>";
}
echo "</table>";
출력 결과는
aa | 0 | 0
ba | 0 | 0
x | y | z
그런데......
$arr2=array(
"a"=>array("aa"),
"b"=>array("ba","bb"),
"c"=>array("x","y","z")
);
$arr2_cnt = count(max(array_values($arr2)));
echo "<table border=1>";
echo "<tr>";
foreach($arr2 as $key=>$val) {
if(is_array($arr2[$key])) {
foreach($val as $key1=>$val1) {
echo "<td> {$val1} </td>";
}
}else {
echo "<td> {$val} </td>";
for($i=0; $i<$arr2_cnt-1; $i++) {
echo "<td>0</td>";
}
}
echo "</tr>";
}
echo "</table>";
출력 결과는
aa |
ba | bb
x | y | z
빈 자리 0이 사라진채 출력이 됩니다.
어디에 문제가 발생 한 것인가요?
배열 출력이 어렵네요......
!-->!-->답변 6
<?php
$arr2=array(
"a"=>array("aa"),
"b"=>array("ba","bb"),
"c"=>array("x","y","z")
);
$arr2_cnt = count(max(array_values($arr2)));
echo "<table border=1>";
foreach($arr2 as $key => $value){
echo "<tr>";
for($s=0; $s<$arr2_cnt; $s++)
{
echo '<td>';
echo (isset($arr2[$key][$s])) ? $arr2[$key][$s] : '0';
echo '</td>';
}
echo '</tr>';
}
?>
두개의 조건다포함할경우
<?php
$arr2=array(
"a"=>array("aa"),
"b"=>"ba",
"c"=>array("x","y","z"));
$arr2_cnt = count(max(array_values($arr2)));
echo "<table border=1>";
foreach($arr2 as $key => $value){
echo "<tr>";
if(is_array($arr2[$key])){
for($s=0; $s<$arr2_cnt; $s++)
{
echo '<td>';
echo (isset($arr2[$key][$s])) ? $arr2[$key][$s] : '0';
echo '</td>';
}
}else{
echo '<td>'.$value.'</td>';
for($s=0; $s<$arr2_cnt-1; $s++)
{
echo '<td>0</td>';
}
}
echo '</tr>';
}
?>
100% 정확한 설명은 아니지만, 개념적으로 ..설명을드리면
선언의 차이 입니다.
첫번째 문장은
배열의 값을
2차원으로 만들어둔 구조이고
두번째 문장은
배열의 인수를 배열로 넣은 형태입니다
foreach 는 배열의 값을 기준으로 출력을 합니다.
즉, 처음것은 2차원배열이라서 가로세로가 3번째 값들에 맞게 맞춰진 형태가 된구조이고
두번째는 배열의 요소가 배열이라서 첫번째 요소는 1개짜리 배열, 두번째 요소는 2개짜리 배열, 세번째 요소는 3개짜리 배열이 됩니다.
처음문장의 배열의 첫번째 두번째가 값으로 존재하기때문에
구조체를 지원하지 않는 배열은 배열값으로 3행3열을 만들었다고 보시면됩니다.
$arr2_cnt = count(max(array_values($arr2)));
이게 이상하군요.
배열 길이의 최대를 구하고자 한 것이면
$max_cnt=0;
foreach( $arr2 as $aa) {
if( is_array( $aa) ) $tmp= count( $aa); else $aa=1;
if( $max_cnt < $aa) $max_cnt=$aa;
}
이렇게 해야 합니다.
첫번째 코드는 a, b키가 배열이 아니라서 else문의 for문을 최대요소숫자만큼 돌려 요소가 없는 경우
0이 찍힌 것이고,
두번째 코드는 a, b키 값이 배열이라서 else문이 아니라 if문을 통과하다 보니 0이 찍힐일이
없었던거죠.
둘째 코드는 else 부분이 필요가 없죠. 모두 array니까요.
if(is_array($arr2[$key])) {
foreach($val as $key1=>$val1) {
echo "<td> {$val1} </td>";
}
//여기서 부족한 갯수<TD를 채워 주면 됩니다.
}else {
echo "<td> {$val} </td>";
for($i=0; $i<$arr2_cnt-1; $i++) {
echo "<td>0</td>";
}
}
제가 연구하여 얻은 결과물 입니다.
$arr=array(
"a"=>array("aa"),
"b"=>array("ba","bb"),
"c"=>array("x","y","z")
);
$arr_cnt = count(max(array_values($arr)));
echo "<table border=1>";
foreach($arr as $key=>$val) {
echo "<tr>";
$arr2_cnt = count(array_values($val));
foreach($val as $key1=>$val1) {
echo "<td> {$val1} </td>";
}
for($i=0; $i<$arr_cnt-$arr2_cnt; $i++) {
echo "<td> 0 </td>";
}
echo "</tr>";
}
echo "</table>";