php - 如何在数组中查找和计算相同的值,然后通过 PHP 插入一个节点:'count: (int)'?
问题描述
我有一个动态的纬度和经度数组,但我需要插入相同值的计数,同时通过 PHP消除重复项。所以这...
Array (
[0] => Array (
[lat] => 40.7587979
[lon] => -73.9623427
)
[1] => Array (
[lat] => 39.8587028
[lon] => -84.277025
)
[2] => Array (
[lat] => 37.7647993
[lon] => -122.4629897
)
[3] => Array (
[lat] => 37.7647993
[lon] => -122.4629897
)
[4] => Array (
[lat] => 33.5125302
[lon] => -117.6860507
)
[5] => Array (
[lat] => 39.8587028
[lon] => -84.277025
)
)
……变成了……
Array (
[0] => Array (
[lat] => 40.7587979
[lon] => -73.9623427
[count] => 1
)
[1] => Array (
[lat] => 39.8587028
[lon] => -84.277025
[count] => 2
)
[2] => Array (
[lat] => 37.7647993
[lon] => -122.4629897
[count] => 2
)
[3] => Array (
[lat] => 33.5125302
[lon] => -117.6860507
[count] => 1
)
)
我理解使用 array_count_values(),但这不会在每个节点中插入新的计数值。用例将是一个热图,其中地图根据相同坐标的数量进行加权。
解决方案
有几种方法可以解决这个问题,涉及循环和条件,但array_count_values()
对于大型集合非常有效。这是一个与 to 捆绑array_count_values()
在一起的循环array_map()
:
array_map()
将原始lat,lng
数组的数组对转换为字符串数组lat|lng
array_count_values()
计算这些lat|lng
字符串的唯一值并将它们作为指向计数的数组键返回为值foreach
循环迭代该lat|lng
键控计数数组并将它们拆分回输出子数组。
// To hold the new array
$out = [];
// Outer loop over the result from array_count_values()
foreach (array_count_values(array_map(function($l) {
// Map function combines lat|lng
return implode("|", $l);
// The rest of the loop syntax...
}, $original_array)) as $pair => $count) {
// Split the counted array key back to individual lat,lng
list($lat, $lng) = explode("|", $pair);
// Put it all onto the output array
$out[] = [
'lat' => $lat,
'lng' => $lng,
'count' => $count
];
}
print_r($out);
印刷:
Array
(
[0] => Array
(
[lat] => 40.7587979
[lng] => -73.9623427
[count] => 1
)
[1] => Array
(
[lat] => 39.8587028
[lng] => -84.277025
[count] => 2
)
[2] => Array
(
[lat] => 37.7647993
[lng] => -122.4629897
[count] => 2
)
[3] => Array
(
[lat] => 33.5125302
[lng] => -117.6860507
[count] => 1
)
)
注意:与示例输出的一个区别是您在丢弃重复项后保留了原始0,1,2,4
外部数组键。此输出是一个新数组,按顺序对所有外部键进行编号0,1,2,3
。如果您确实需要保留原始数组键,则需要做更多工作。
推荐阅读
- angular - 如何向我的 Angular 7 应用程序添加一个简单的对话框?
- android - HTTP 连接崩溃
- c++ - 不同于按值传递和按 const ref 传递的程序集
- angularjs - Django DRF 外键
- c++ - 关闭 qcombobox 的下拉菜单
- sql-server - 通过ip或本地服务器名称访问sql server哪种方式更好
- php - 写入图像文件空白页时,Fwrite 产生 0 个字节
- reactjs - 如何在 reactjs 中从 Mon Oct 01 2018 02:00:00 GMT+0530(印度标准时间)中提取时间
- file - 钴主 16 主目录中的 xxx-armdirectfb_gold_v8_startup_snapshot.bin 是什么?
- ffmpeg - 如何在 h264 中流式传输视频?