1 つに結合された 2 つの配列があります。1 つの配列にはいくつかの製品があり、もう 1 つの配列には数字 (製品の数) があります。
$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 x RT542、次に 1 x RT538、次に 3 x 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;
}