php 다차원 배열의 빈자리?
본문
2차원 배열을 사용하려고 합니다.
그런데 이 배열에 들어 가는 값이 $i=1,2,3... 으로 차례대로 들어가지 않고 중간중간 건너 뛸때 문제될게 있을까요?
예를들어 학생명단을 배열로 만들어 학번, 성멸, 이름을 배열에 저장한다고 할때, 첫번째 배열요소 번호를 학번으로 사용하려고 합니다.
즉 학번,성별,이름을 저장한다고 할때 첫번째 요소번호를 학번으로 사용하려고 합니다.
$arr = array();
$arr[3][0] = '남';
$arr[3][1] = '홍길동';
$arr[5][0] = '여';
$arr[5][1] = '황진이';
$arr[115][0] = '여';
$arr[115][1] = '임꺽정';
위와 같이 저장하면 $arr[0][0]~$arr[2][1] 은 안쓰는 것이 되잖아요.
또 $arr[6][0]~$arr[114][1] 도 안쓰구요.
이렇게 중간에 건너 뛰어도 작동은 하는것 같은데 무슨 문제가 있을까요?
물론 이렇게 만들면 for 반복문을 사용하기 힘들다는 문제는 있을 겁니다.
그런데 그것 외에 또 문제가 있을것이 있을까요?
건너 뛴 자리도 메모리를 다 차지할까요?
그리고 위와 같이 건너뛴 배열순번에 for 나 while 문으로 순차적으로 하나씩 접근하는 방법도 있을까요?
꼭 이렇게 한다는게 아니고 3차원배열을 써야 할 상황인데, 이렇게 하면 2차원배열로 될것 같아서 궁금해서 묻습니다.
답변 2
상관없습니다.
배열의 인덱스가 숫자던 문자열이던 문제 없죠.
그렇다면 배열이 숫자건 문자건 사용자가 지정한것이니 3 인덱스 다음에 꼭 4가 필요한것도 아닙니다.
메모리를 1,2,3,4,5,6,7,.. 등등으로 선점하지 않아요. 선언된 배열만 메모리에 들어가게 됩니다.
단순한 순차증가형 인덱싱을 가진 배열이라면 for 로 하던 뭐로하던 상관없지만
그게아니라면 foreach 를 통해서 돌리는게 더 낫지요.
숫자로 순차인덱싱된 배열이라도 배열의 총 count 를 얻어서 for 를 돌린후
존재하지 않는 배열의 인덱스 번호만 체크해주면 나중에 채우는것도 문제가 없을것같습니다.
$arr = array_values($arr);
위 코드 실행하면 배열이 순서대로 정리됩니다. 빈값은 제거되구요.