array2개를 포문으로 2번 반복해야 하는데용... 방법이 있을까요?

array2개를 포문으로 2번 반복해야 하는데용... 방법이 있을까요?

QA

array2개를 포문으로 2번 반복해야 하는데용... 방법이 있을까요?

본문


<?php
$room = array('Tires', 'Oil', 'Spark', 'Plugs', 'metal');
$name = array("시금치", "콩나물", "아욱", "냉이");
shuffle($name);
for($i = 0; $i < count($room); $i++){
    echo $room[$i]." : ".$name[$i]."<br/>";
}
?>

 

여기서 room은 가변적으로 늘어날테고

name는 고정으로 정해져있습니다.

 

여기서 질문 1 

room(5개)의 숫자가 name(5개)과 같으면 오류가 없는데

room의 숫자가 1이라도 높아지면 오류가 생기네요.. offset를 찾을수 없다네요.. 방법이 없을까요? 

 

질문2 질문1이 해결이 된다면 

 

그 과정을 2번 반복해야 하는데........ 


for($i = 0; $i < count($room) * 2; $i++){

이렇게 하면될까요?

 

1번이 해결되지 않아.. 2번은 시도조차 못하고있어요.. 도와주세요 고수님들..

 

이 질문에 댓글 쓰기 :

답변 4

 1번이 해결되지 않아.. 2번은 시도조차 못하고있어요<---

질문을 이해하는 것이 코드 만드는 것보다 더 어렵네요. 어떻게 할당을 하고싶다는 설명이 있어야죠

위 소스에서  metal 에는 어떤 값이 대응되게 하고싶다는 것인가요?

 

원하는 답변인지 모르겟으나 계속 돌아가면서 할당하는 것은 아래처럼

$k= $h = 0;
$mm =count($room);
$nn = count($name);
for($i = 0; $i < $mm * 2; $i++){
  if($h && $h % $mm ==0) $h =0;
  if($k && $k % $nn ==0) $k =0;
   echo $room[$h]." : ".$name[$k]."<br/>";
   $k++; $h++;
}

 

 

 

 

 

아 .. ㅎㅎ 결과는 제가 원하는게 맞는것 같아요 ㅎㅎ

다시 2번만 설명드리면 랜덤으로 짝을 짓는 포문을 2번 반복시키는거에요

그걸 안적어놨네요 ㅎㅎ;;



$room은 가변적으로 늘어나게될 상황이고요
$name는 고정적으로 정해 놓을거에요

$room에 랜덤으로 $name를 짝지을건데

$room의 길이가 $name보다 길어지면 오류가 나더라구요.


<?php
$room = array('Tires', 'Oil', 'Spark', 'Plugs', 'metal');
$name = array("시금치", "콩나물", "아욱", "냉이");
$arr_size = sizeof($room);
if($arr_size < sizeof($name)) ​​​​​​​$arr_size = sizeof($name);
shuffle($name);
for($j=0; $j<2; $j++) {
  for($i = 0; $i < $arr_size; $i++){
    echo $room[$i]." : ".$name[$i]."<br/>";
  }
}
?>

오류 안날텐데요.

없는 배열 요소을 참조하려하면 echo 에 대해선 그냥 널(void)가 출력될텐데요.

즉 1번출력은

Tires : 시금치
Oil : 콩나물
Spark : 아욱
Plugs : 냉이
metal : (출력없음)
 

2번 출력은

Tires : 시금치
Oil : 콩나물
Spark : 아욱
Plugs : 냉이
metal : (출력없음)
(출력없음) : (출력없음)
(출력없음) : (출력없음)
(출력없음) : (출력없음)
(출력없음) : (출력없음)
(출력없음) : (출력없음)

 

이렇게 나올겁니다.

 

코드대로 조건대로 나오는건데요.

Tires : 시금치 >> room[0] name[0] >> 룸 1회차
Oil : 콩나물 >> name[1]
Spark : 아욱 >> name[2]
Plugs : 냉이 >> name[3]
metal : 시금치 >>> room[4] name[0]
Tires : 콩나물 >> room[0] name[1] >> 룸 2회차
Oil : 아욱
Spark : 냉이
Plugs : 시금치 >> name[0]
metal : 콩나물

인것 같군요

 

간단하게 생각한다면

복사해서 배열을 채워 넣으시면 됩니다.  ( 다른방법도 있습니다.)

아래 경우는 $name 배열을 크기를 루프 크기만큼 복사해서 키워준것입니다.


$roomSize = count($room);
$nameSize = count($name);
$room_loop_su = 2; // 룸변수를 두번 돌리겠다면
$loop_limit = count( $room ) * room_loop_su;
var $new_name = array();
var $cnt = 0;
while( $cnt < $loop_limit ) {
  $new_name[] = $name[ $cnt % $nameSize ];
  $cnt++;
}
 
for( $i=0; $i < count($room) * $room_loop_su ;  $i++ ) {
    echo $room[ $i % $roomSize ] ." : ". $name[$i] ."<br>";
}

 

$name 을 회차마다 섞어 주겠다면 적당한 자리에서 suffle 을 한번 해주시면 되겠고요.

답변을 작성하시기 전에 로그인 해주세요.
전체 179
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT