Tôi đang làm việc với một mảng một chiều trong PHP. Tôi muốn phát hiện sự hiện diện của các giá trị trùng lặp, sau đó đếm số lượng các giá trị trùng lặp và đưa ra kết quả. Ví dụ: đưa ra mảng sau:
$array = array['apple', 'orange', 'pear', 'banana', 'apple',
'pear', 'kiwi', 'kiwi', 'kiwi'];
Tôi muốn in:
apple [2]
orange
pear [2]
banana
kiwi [3]
Bất kỳ lời khuyên về cách tiếp cận vấn đề này?
Thanks.
Mike
Silentghost
294K64 Huy hiệu vàng301 Huy hiệu bạc291 Huy hiệu Đồng64 gold badges301 silver badges291 bronze badges
hỏi ngày 23 tháng 7 năm 2009 lúc 10:11Jul 23, 2009 at 10:11
Bạn có thể sử dụng chức năng Array_Count_Values
$array = array['apple', 'orange', 'pear', 'banana', 'apple',
'pear', 'kiwi', 'kiwi', 'kiwi'];
print_r[array_count_values[$array]];
sẽ đầu ra
Array
[
[apple] => 2
[orange] => 1
[pear] => 2
etc...
]
Gagantous
3506 Huy hiệu vàng26 Huy hiệu bạc63 Huy hiệu Đồng6 gold badges26 silver badges63 bronze badges
Đã trả lời ngày 23 tháng 7 năm 2009 lúc 10:14Jul 23, 2009 at 10:14
SilfverstromsilfverstromSilfverstrom
Phù hiệu vàng 27.2k644 Huy hiệu bạc56 Huy hiệu đồng6 gold badges44 silver badges56 bronze badges
1
if[count[array_unique[$array]] $value] {
if[isset[$new_array[$value]]]
$new_array[$value] += 1;
else
$new_array[$value] = 1;
}
foreach [$new_array as $fruit => $n] {
echo $fruit;
if[$n > 1]
echo "[$n]";
echo "
";
}
Đã trả lời ngày 23 tháng 7 năm 2009 lúc 10:36Jul 23, 2009 at 10:36
Khăn quàng cổ SimonSimon Scarfe
9.1404 Huy hiệu vàng27 Huy hiệu bạc32 Huy hiệu Đồng4 gold badges27 silver badges32 bronze badges
1
Để loại bỏ sử dụng
apple [2]
orange
pear [2]
banana
kiwi [3]
6. Để phát hiện nếu có bất kỳ sử dụng apple [2]
orange
pear [2]
banana
kiwi [3]
7 và so sánh với apple [2]
orange
pear [2]
banana
kiwi [3]
8.
AKSU
5.1815 Huy hiệu vàng23 Huy hiệu bạc39 Huy hiệu Đồng5 gold badges23 silver badges39 bronze badges
Đã trả lời ngày 20 tháng 8 năm 2009 lúc 15:04Aug 20, 2009 at 15:04
Đưa chúng vào
apple [2]
orange
pear [2]
banana
kiwi [3]
9 [mã giả]map[string -> int] $m
foreach[$word in $array]
{
if[!$m.contains[$word]]
$m[$word] = 0;
$m[$word] += 1;
}
Đã trả lời ngày 23 tháng 7 năm 2009 lúc 10:15Jul 23, 2009 at 10:15
Anton Gogolevanton GogolevAnton Gogolev
111K38 Huy hiệu vàng195 Huy hiệu bạc282 Huy hiệu Đồng38 gold badges195 silver badges282 bronze badges
Có lẽ một cái gì đó như thế này [mã chưa được kiểm tra nhưng nên cho bạn một ý tưởng]?
$new = array[];
foreach [$array as $value]
{
if [isset[$new[$value]]]
$new[$value]++;
else
$new[$value] = 1;
}
Sau đó, bạn sẽ nhận được một mảng mới với các giá trị dưới dạng các khóa và giá trị của chúng là số lần chúng tồn tại trong mảng gốc.
Đã trả lời ngày 23 tháng 7 năm 2009 lúc 10:17Jul 23, 2009 at 10:17
1
Tôi không tìm thấy câu trả lời mà tôi đang tìm kiếm, vì vậy tôi đã viết chức năng này. Điều này sẽ tạo ra một mảng chỉ chứa các bản sao giữa hai mảng, nhưng không in số lần một yếu tố được nhân đôi, vì vậy nó không trả lời trực tiếp câu hỏi, nhưng tôi hy vọng nó sẽ giúp ai đó trong tình huống của tôi.
function findDuplicates[$array1,$array2]
{
$combined = array_merge[$array1,$array2];
$counted = array_count_values[$combined];
$dupes = [];
$keys = array_keys[$counted];
foreach [$keys as $key]
{
if [$counted[$key] > 1]
{$dupes[] = $key;}
}
sort[$dupes];
return $dupes;
}
$array1 = [1,2,3,4,5];
$array2 = [4,5,6,7,8];
$dupes = findDuplicates[$array1,$array2];
print_r[$dupes];
Outputs:
apple [2]
orange
pear [2]
banana
kiwi [3]
0Đã trả lời ngày 15 tháng 3 năm 2018 lúc 20:02Mar 15, 2018 at 20:02
Aswineaswineaswine
15911 huy hiệu đồng11 bronze badges
apple [2]
orange
pear [2]
banana
kiwi [3]
1Tôi nghĩ rằng cách này ngắn hơn và sạch hơn.
Đã trả lời ngày 10 tháng 9 năm 2021 lúc 11:17Sep 10, 2021 at 11:17
apple [2]
orange
pear [2]
banana
kiwi [3]
2Đã trả lời ngày 7 tháng 10 năm 2021 lúc 12:02Oct 7, 2021 at 12:02
Hàm này chỉ cung cấp cho bạn các giá trị dự phòng
apple [2]
orange
pear [2]
banana
kiwi [3]
3Đã trả lời ngày 18 tháng 4 lúc 8:31Apr 18 at 8:31
SaifsaifSaif
291 Huy hiệu bạc5 Huy hiệu đồng1 silver badge5 bronze badges
apple [2]
orange
pear [2]
banana
kiwi [3]
4
Tunaki
128K45 Huy hiệu vàng322 Huy hiệu bạc406 Huy hiệu Đồng45 gold badges322 silver badges406 bronze badges
Đã trả lời ngày 16 tháng 4 năm 2016 lúc 18:47Apr 16, 2016 at 18:47
Một phương pháp đơn giản:
apple [2]
orange
pear [2]
banana
kiwi [3]
5
biruk1230
2.9034 Huy hiệu vàng15 Huy hiệu bạc29 Huy hiệu đồng4 gold badges15 silver badges29 bronze badges
Đã trả lời ngày 28 tháng 1 năm 2020 lúc 13:39Jan 28, 2020 at 13:39
1