2017-05-16 67 views
1

我有一个关于在php中关联多维数组的任务。关联数组PHP随机值

比方说,我有如下表:

Product Nr Img 
kat1 abc abc.png 
kat1 xyz xyz.png 
kat2 def def.png 
kat2 gfh gfh.png 
kat2 jug jug.png 
kat3 lkj lkj.png 
kat3 tfh tfh.png 
kat4 fsg fsg.png 
kat4 gzt gzt.png 

构建阵列,如:

$table= array(
    array("Product" => "Kat1","Nr" =>"abc","IMG" =>"abc.png"), 
    array("Product" => "Kat1","Nr" =>"xyz","IMG" =>"xyz.png"), 
    array("Product" => "Kat2","Nr" =>"def","IMG" =>"def.png"), 
    array("Product" => "Kat2","Nr" =>"gfh","IMG" =>"gfh.png"), 
    array("Product" => "Kat2","Nr" =>"jug","IMG" =>"jug.png"), 
    array("Product" => "Kat3","Nr" =>"lkj","IMG" =>"lkj.png"), 
    array("Product" => "Kat3","Nr" =>"tfh","IMG" =>"tfh.png"), 
    array("Product" => "Kat4","Nr" =>"fsg","IMG" =>"fsg.png"), 
    array("Product" => "Kat4","Nr" =>"gzt","IMG" =>"gzt.png"), 

); 

我想建随机productsets。每个产品组应包含来自每个单一分类的一种产品。例如下面的输出:

Kat1 = abc, abc.png 
Kat2 = gfh, gfh.png 
Kat3 = lkj, lkj.png 
Kat4 = gzt, gzt.png 

我不知道如果我在正确的道路或者其可能与该类型的数组。任何想法如何我可以解决这个问题?

+2

预计你去尝试自己**编写代码**。在[**做更多的研究**之后](https://meta.stackoverflow.com/q/261592/1011527)如果你有问题**发布你已经尝试了**的**明确的解释不工作**并提供[最小,完整和可验证示例](http://stackoverflow.com/help/mcve)。阅读[如何问](http://stackoverflow.com/help/how-to-ask)一个很好的问题。请务必[参观](http://stackoverflow.com/tour)并阅读[this](https://meta.stackoverflow.com/q/347937/1011527)。 –

+0

你能解释一些关于你到底想要什么吗?正如你提到的“Kat1 = abc,abc.png”,不太清楚你的问题。 – hvs9

回答

1

您可以使用此MySQL查询来获得期望的结果:

SELECT 
    * 
FROM 
    (SELECT 
     * 
    FROM 
     product 
    ORDER BY RAND()) AS shuffled_products 
GROUP BY PRODUCT; 

一旦你使用循环操纵它到期望的结果收到的结果数组在PHP。

+0

不错的主意。我想这就是我将如何解决它。谢谢! – swapfile

+1

@swapfile此查询未针对性能进行优化。希望你照顾好。而不是'*'只选择你需要的列。 – gvgvgvijayan

1

1)尝试重建阵列鉴于这样的(按类别组):

$tableGroupByCats = [ 
    "Kat1" => [ 
     ["Nr" =>"abc","IMG" =>"abc.png"], 
     ["Nr" =>"xyz","IMG" =>"xyz.png"] 
    ], 
    "Kat2" => [ 
     ["Nr" =>"def","IMG" =>"def.png"], 
     ["Nr" =>"gfh","IMG" =>"gfh.png"], 
     ["Nr" =>"jug","IMG" =>"jug.png"] 
    ], 
    "Kat3" => [ 
     "Nr" =>"lkj","IMG" =>"lkj.png", 
     "Nr" =>"tfh","IMG" =>"tfh.png" 
    ], 
    "Kat4" => [ 
     ["Nr" =>"fsg","IMG" =>"fsg.png"], 
     ["Nr" =>"gzt","IMG" =>"gzt.png"] 
    ] 
]; 

下面的代码将帮助您:

$table= array(
    array("Product" => "Kat1","Nr" =>"abc","IMG" =>"abc.png"), 
    array("Product" => "Kat1","Nr" =>"xyz","IMG" =>"xyz.png"), 
    array("Product" => "Kat2","Nr" =>"def","IMG" =>"def.png"), 
    array("Product" => "Kat2","Nr" =>"gfh","IMG" =>"gfh.png"), 
    array("Product" => "Kat2","Nr" =>"jug","IMG" =>"jug.png"), 
    array("Product" => "Kat3","Nr" =>"lkj","IMG" =>"lkj.png"), 
    array("Product" => "Kat3","Nr" =>"tfh","IMG" =>"tfh.png"), 
    array("Product" => "Kat4","Nr" =>"fsg","IMG" =>"fsg.png"), 
    array("Product" => "Kat4","Nr" =>"gzt","IMG" =>"gzt.png"), 

); 

$tableGroupByCats = []; 
foreach ($table as $product) { 
    $tableGroupByCats[$product['Product']][] = ["Nr" => $product["Nr"], "IMG" => $product["IMG"]]; 
} 

或者,你可以从数据库使用检索阵列一样, GROUP BY

2)让您的结果:

$result = []; 
foreach ($tableGroupByCats as $ctegory => $products) { 
    $randNum = mt_rand(0, (count($products)-1)); 
    $result[$ctegory] = $products[$randNum]; 
} 
1

这里是另一种方式来做到这一点:

代码:

shuffle($table); 
foreach($table as $row){ 
    $result[$row["Product"]]="{$row["Product"]} = {$row["Nr"]}, {$row["IMG"]}"; // overwrite duplicates 
} 
ksort($result); // sort result array by Product ASC 
var_export($result); 

可能的输出:

array (
    'Kat1' => 'Kat1 = xyz, xyz.png', 
    'Kat2' => 'Kat2 = jug, jug.png', 
    'Kat3' => 'Kat3 = lkj, lkj.png', 
    'Kat4' => 'Kat4 = gzt, gzt.png', 
)