簡體   English   中英

PHP - 在數組中查找唯一值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM