배열의 일부 요소를 선택하고 PHP로 임의로 섞을 수 있습니까? 변경되지 않은 다른 요소를 유지하면서배열의 일부 요소 (전부는 아님)를 선택하고 PHP로 임의로 섞을 수 있습니까?
shuffle(array)
를 사용, 그것은, 배열의 모든 요소를 섞어하지만 난 그냥 배열의 일부 요소 셔플 할 때, 알고, 그것을 어떻게 할까?
배열의 일부 요소를 선택하고 PHP로 임의로 섞을 수 있습니까? 변경되지 않은 다른 요소를 유지하면서배열의 일부 요소 (전부는 아님)를 선택하고 PHP로 임의로 섞을 수 있습니까?
shuffle(array)
를 사용, 그것은, 배열의 모든 요소를 섞어하지만 난 그냥 배열의 일부 요소 셔플 할 때, 알고, 그것을 어떻게 할까?
array_slice
을 사용하여 셔플하려는 배열 부분을 복사하고 복사본을 섞은 다음 array_splice
을 사용하여 셔플 된 데이터를 원래 배열로 다시 복사 할 수 있습니다.
편집 : 더 일반적으로 셔플하려는 항목의 키를 알고있는 경우 $keys
이라는 배열에 넣으십시오. 그런 다음 :
// Get out the items to shuffle.
$work = array();
foreach ($keys as $i => $key) {
$work[$i] = $myarray[$key];
}
shuffle($work); // shuffle them
// And put them back.
foreach ($keys as $i => $key) {
$myarray[$key] = $work[$i];
}
(죄송합니다,이 몇 가지 실수가있는 경우, 내 PHP는 녹슨이고 나는 그것을 테스트 할 수있는 컴퓨터 근처에 아니에요!) 다차원 위해 작동과 매우 유사
뭔가 정렬. $keys
의 각 요소는 인덱스 배열 일 수 있으며 $myarray[$key]
대신 $myarray[$key[0]][$key[1]]
을 작성합니다.
는
function swap(&$a, &$b) { list($a, $b) = array($b, $a); }
$len = count($a);
for($i = 0; $i < $len; $i++) {
$j = rand(1, $len) - 1;
swap($a[$i], $a[$j]);
}
이러한 모든 배열 요소를 셔플 표준 루프 다음 고려한다. 일부 ("이동") 요소를 섞으려면의이이 위치에 요소를 이동
$len = count($keys);
for($i = 0; $i < $len; $i++) {
$j = rand(1, $len) - 1;
swap($a[$keys[$i]], $a[$keys[$j]]);
}
키 $를 통해 루프 $ 이상 루프를 배열
$keys = array(1, 3, 5, 7, 9, 11, 13, 17);
에 열쇠를 넣어 불러들이는 대신, 1, 3, 5 등 다른 요소를 제자리에 남겨 놓습니다.
수치 배열이 아닌 연관 배열을 셔플하고 싶습니다. – Steven
http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle#The_modern_algorithm에 따르면, rand (1, $ len)보다는 rand ($ i, $ len)에서 바꿀 수 있습니다. –
배열이 다차원 배열이고 첫 번째 레벨이 아닌 두 번째 레벨의 일부 요소를 임의로 혼합하길 원한다면 어떻게해야합니까? – Steven
OK, 다차원 배열에이 기술을 적용하는 방법을 설명하기 위해 편집했습니다. –