2012-03-14 7 views
0

나는 추적하고있는 108,002 개의 항목이 있습니다. 그 중PHP에서 for 루프의 결과를 임의로 정렬하십시오.

55011 "는 항목 2는"그들의

8060가 이름을 부여 할 예정 "항목 1은"그들

32531이 이름을 부여하고자하는 이름을 부여 할 예정 "항목 3 "그들 중

12400이 이름을 부여 할 예정"나는이 작업을 수행하는 루프를 사용하고 있습니다 "

item4.

for ($i = 1; $i <= 108002; $i++) { 


if($i <= 55011){ 

$item = "item1"; 

}else if($i > 55011 && $i < 87542){ 

$item = "item2"; 

}else if($i > 87542 && $i < 95602){ 

$item = "item3"; 

}else if($i > 95602 && $i <= 108002){ 

$item = "item4"; 

} 

} 

그리고 나서 각각을 MySQL 데이터베이스에 삽입합니다.

그러나 트릭은 내가 모든 등 같은 이름을 가진 최초의 55,011 항목을하지 않아도 그들에게 무작위로 삽입 할 것입니다

나는이 작업을 수행하지만 여전히 허용 할 수있는 방법 어떤 아이디어 각 항목의 정확한 양?

+0

내가 물어 봐도 (? 어떻게 나는 그 잊지)? – Aatch

+0

그는. 내 DB에이 레코드가 들어있는 테이블이 있어야 항목의 재고를 추적 할 수 있습니다. 난 DB에 – Daelan

답변

2

어레이에 넣고 shuffle()입니다.

+0

100k + 항목 배열에있는 데이터를 얻을 한 번만 실행 중이 야? –

+0

@ tereško 일회성 작업을 위해? 확실한. – Amber

+0

어레이를 셔플 해 줘서 고마워. – Daelan

1

이 작업은 한 번만 또는 적어도 드물게 수행하고 싶다면 Amber가 말했듯이 아마 PHP에서 거대한 배열을 만들고 셔플을하고 싶을 것입니다.

그 배열이 너무 큰 것입니다 경우 /이 같은 (안된 의사 코드) 의미를

left = [0, 55011, 32531, 8060, 12400] 
for i in 108001..0 
    r = rnd_zero_to_one_less_than(i) 
    for j in 1..4 
     if r < left[j] 
      left[j] -= 1 
      insert("item"+j) 
      break 
     r -= left[j] 

을 할 수있는 느린?

편집 : 모든 값을 가진 배열을 갖는 대신 1, 2, 3 및 4의 왼쪽에 몇 개가 있는지를 나타내는 "왼쪽"이 있습니다. 거대한 배열에서 무작위로 요소를 제거하는 대신, "왼쪽"에서 카운트 중 하나를 감소시킬 수 있습니다.

편집 : 지구에 당신이이 일을하는 이유 코드를 추가 마지막 두 줄

+0

예 한 번만 데이터를 데이터베이스로 가져오고 있습니다. – Daelan