[英]PHP - finding unique values within an array
我正在创建一个电子商务网站,并试图获取最畅销产品的列表。
以下示例显示了来自销售的一系列产品 ID,并以'product id' x 'number of sales'
的形式输出最畅销的产品
<?php
$product_ids = [58,58,68,39,4,118,14,54,39,118,58];
$top_selling_products = "";
$product_sales = array_count_values($product_ids);
arsort($product_sales);
$i = 0;
foreach($product_sales as $sales){
$i++;
$product_id = array_search($sales,$product_sales);
$top_selling_products .= $product_id.' x '.$sales.'<br />';
if($i == 5){break;}
}
echo $top_selling_products;
?>
但是,它并没有完全按照我的意愿行事,目前正在输出以下内容:
58 x 3
118 x 2
118 x 2
54 x 1
54 x 1
应该在哪里:
58 x 3
118 x 2
39 x 2
54 x 1
14 x 1
它以相同的索引获取数组中的最后一项,因此当有两个或多个具有相同销售额的产品时,它不会提取它们。
获得所有唯一 ID 的最佳方法是什么?
您已经在$product_sales
获得了所需的东西:
foreach($product_sales as $id => $count){
$i++;
$top_selling_products .= $id.' x '.$count.'<br />';
if($i == 5){break;}
}
您的代码可以简化为使用类似array_map()
:
arsort($product_sales);
$output = array_map(function($sales, $pid) {
return $pid.' x '.$sales;
}, $product_sales, array_keys($product_sales));
echo implode('<br />', $output);
<?php
$product_ids = [58,58,68,39,4,118,14,54,39,118,58];
$product_sales = array_count_values($product_ids);
arsort($product_sales);
$top_five_sellers = array_slice($product_sales, 0, 5, true);
foreach($top_five_sellers as $id => $count)
echo $id.' x '.$count."\n";
输出:
58 x 3
39 x 2
118 x 2
68 x 1
4 x 1
你可以通过使用array_count_values
+ Simple foreach
+ Sort array by Keeping key with arsort
来实现你的目标
$product_ids = [58,58,68,39,4,118,14,54,39,118,58];
$arr = array_slice(array_count_values($product_ids), 0, 5, true);
arsort($arr);
$str = "";
foreach($arr as $k=>$v)
$str .= "$k X $v \n";
echo $str;
输出为:
58 X 3
118 X 2
39 X 2
68 X 1
4 X 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.