하나에 결합 된 2 개의 배열이 있습니다. 하나의 제품에는 하나의 제품이 있고 다른 하나에는 번호가있는 제품 (제품 수)이 있습니다. 지금까지 너무 좋아배열 키를 섞어서 foreach에 넣습니다.
Array (
[RT542] => 10
[RT543] => 15
[RT538] => 13
)
:
$brick = "RT542,RT543,RT538";
$ratio = "10,15,13";
$bricks = explode(",", $brick);
$ratios = explode(",", $ratio);
$bricks_and_ratio = array_combine($bricks, $ratios);
Array (
[0] => RT542
[1] => RT543
[2] => RT538
)
Array (
[0] => 10
[1] => 15
[2] => 13
)
array_combine()는 다음 날이 있습니다. 내가 원하는 것은이 배열을 뒤섞어서 처음 2 x RT542, 1 x RT538, 3x RT543 등등의 행을 얻는 것입니다. 최대 항목 수까지.
function BuildCustomBricks($myBricksAndRatios) {
$img = imagecreate(890,502);
imagealphablending($img, true);
imagesavealpha($img, true);
$keys = array_keys($myBricksAndRatios);
shuffle($keys);
$random = array();
foreach ($keys as $key) {
$random[$key] = $myBricksAndRatios[$key];
for($i = 1; $i <= $myBricksAndRatios[$key]; $i++) {
$cur = imagecreatefrompng("/var/www/brickmixer/bricks/". $key."-$i.png");
imagealphablending($cur, true);
imagesavealpha($cur, true);
imagecopy($img, $cur, -150+$i*132, 0, 0, 0, 125, 32);
}
imagedestroy($cur);
}
header('Content-Type: image/png');
imagepng($img);
}
그것은 셔플을하지만,하지 무작위 순서로 같은 제품의 이미지 행을 생성합니다
나는 이것을 사용하고 있습니다. 각 제품 키에 최대 제품 수를 보존해야합니다.
해결책 :
function shuffle_bricks($array) {
foreach($array as $key => $value) {
for($i = 1; $i <= $value; $i++) {
$new_array[] = $key;
}
}
shuffle($new_array);
return $new_array;
}
'array_fill'을 사용하십시오 – diEcho
예를 들어 var_dump 또는 print_r을 사용할 수 있습니까? –
내가 기대하는 것은 벽돌 (제품)이 무작위로 혼합되는 결과물입니다. 각 벽돌의 출력이 10 인 다른 10 가지 색상의 벽돌이 있다고 가정 해 보겠습니다. 최종 이미지는 무작위로 혼합 된 서로 다른 색상의 벽돌 100 개로 구성됩니다. 위의 함수를 사용하면 동일한 제품의 10 개의 벽돌, 다음의 10 개의 벽돌 등을 인쇄합니다. 어떤 제품이 먼저 나올지는 무작위 일 것입니다. –