我知道我這樣做是個不錯的方法......但我無法看到任何的替代品。我有一系列需要隨機選擇4個的產品。 $ rawUpsellList是基於購物車中物品的所有可能的加售的數組。每個值都是一個產品對象。我知道這是可怕的醜陋的代碼,但我沒有看到另一種現在....有人請把我從我的痛苦所以這個代碼不使其向生產.....我犯了一個可怕的循環....幫助解決我的邏輯,請
$rawUpsellList = array();
foreach ($tru->global->cart->getItemList() as $item) {
$product = $item->getProduct();
$rawUpsellList = array_merge($rawUpsellList, $product->getUpsellList());
}
$upsellCount = count($rawUpsellList);
$showItems = 4;
if ($upsellCount < $showItems) {
$showItems = $upsellCount;
}
$maxLoop = 20;
$upsellList = array();
for ($x = 0; $x <= $showItems; $x++) {
$key = rand(0, $upsellCount);
if (!array_key_exists($key, $upsellList) && is_object($rawUpsellList[$key])) {
$upsellList[$key] = $rawUpsellList[$key];
$x++;
}
if ($x == $maxLoop) {
break;
}
}
發佈這個代碼是高度尷尬...
這是[Fisher-Yates shuffle]的基本實現(http://en.wikipedia.org/wiki/Fisher-Yates_shuffle):) – Matchu 2010-04-13 18:26:51
哈,謝謝:)我不知道它有一個名字,雖然我已經使用過很多次了。 – 2010-04-13 18:28:24
...我也只是注意到Markdown以某種方式破壞了URL。 http://en.wikipedia.org/wiki/Fisher-Yates_shuffle – Matchu 2010-04-13 18:33:18