我有2個陣列,它們被組合成一個。一個陣列有一些產品,另一個陣列有數字(產品數量)。洗牌數組的鍵,然後混合在的foreach
$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(),然後給了我這樣的:
Array (
[RT542] => 10
[RT543] => 15
[RT538] => 13
)
到目前爲止好。我要的是重新洗牌以這樣一種方式這陣,我會得到一排第一2×RT542然後1個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);
}
它做的洗牌,但它創建相同的產品,而不是按隨機順序的圖像的一行。 我需要保留每個產品密鑰的最大產品數量。
SOLUTION:
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個磚塊等等。儘管如此,它會是隨機的,哪種產品最先出現 –