我有一個包含多個物件的大型陣列,其中有幾個重復項。我使用 array_unique(PHP) 得到了一個唯一的陣列。現在,我需要知道如何獲取每個物件在原始陣列中出現的次數?
我已經嘗試過 array_search 和回圈,但沒有得到正確的結果。一些類似這里的陣列,但它的集合非常大,大約有 500K 個條目。
[{
"manufacturer": "KInd",
"brand": "ABC",
"used": "true"
},
{
"manufacturer": "KInd",
"brand": "ABC",
"used": "true"
},
{
"manufacturer": "KInd",
"brand": "ABC",
"used": "false"
}]
uj5u.com熱心網友回復:
您不需要使用任何復雜的序列化或編碼來創建用于分組的復合鍵。只需分解每一行的值(假設它們都包含以相同順序排列的相同列)來為結果陣列創建一個標識鍵。
在第一次遇到時,將行的資料存盤在組中,并將組的計數設定為 1;在任何后續遭遇中,增加該組的計數器。
代碼:(演示)
$result = [];
foreach ($array as $row) {
$compositeKey = implode('_', $row);
if (!isset($result[$compositeKey])) {
$result[$compositeKey] = $row ['count' => 1];
} else {
$result[$compositeKey]['count'];
}
}
var_export(array_values($result));
輸出:
array (
0 =>
array (
'manufacturer' => 'KInd',
'brand' => 'ABC',
'used' => 'true',
'count' => 2,
),
1 =>
array (
'manufacturer' => 'KInd',
'brand' => 'ABC',
'used' => 'false',
'count' => 1,
),
)
其他利用多個標識列值進行分組的帖子:
- 根據 3 個標識列對兩個二維陣列中的行進行分組/合并,并用空值填充缺失的列值
- 分組資料行,每組中出現的總和,并將資料列印為格式化字串
- 基于兩列對多維陣列中的資料進行分組
- 對多維陣列的行進行分組,并在每個組中形成逗號分隔的值
- 按兩列對行進行分組,過濾分組資料以僅保留最低值,并重組關聯行
- 對資料行進行分組,在組內維護一個id的子陣列,只呈現每組中最低的id作為第一級key
- 根據兩列值和每組中一列的總和值對多維陣列資料進行分組
- 如何在php中創建一個樞軸陣列
uj5u.com熱心網友回復:
如果我理解正確,這應該會有所幫助
function getUniqWithCounts(array $data): array
{
$result = [];
foreach ($data as $item) {
$hash = md5(serialize($item));
if (isset($result[$hash])) {
$result[$hash]['count'] ;
continue;
}
$item['count'] = 1;
$result[$hash] = $item;
}
return array_values($result);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/528739.html
標籤:php数组目的数数重复
上一篇:從物件JS中檢索資訊
