首页 / PHP / php – 数组和循环管理
php – 数组和循环管理
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – 数组和循环管理,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1581字,纯文字阅读大概需要3分钟。
内容图文
![php – 数组和循环管理](/upload/InfoBanner/zyjiaocheng/794/7c1ce7d28b174d44a708000bb8a4b85f.jpg)
在这里,我编写了简单的程序,但在管理它方面没什么问题.
我有6分,每个点我想计算到其他点的距离.
DEmo – http://ideone.com/mYl30O
码:
<?php
$a_points = array(
array(0, -1),
array(-2, 3),
array(4, 0),
array(3, 1),
array(5, 2),
array(0, 1),
);
$k = 0;
$a_sum_dists = array();
$sum = array();
foreach ($a_points as $i => $pt1) {
list($x1, $y1) = $pt1;
//$sum = 0;
foreach ($a_points as $j => $pt2) {
if ($j == $i) continue;
list($x2, $y2) = $pt2;
$sum[$k] = pow($x2- $x1, 2) + pow($y2- $y1, 2);
$k++;
}
//$a_sum_dists[$i] = $sum;
}
?>
我想要的是:
>对于每个点,与所有其他点保持距离.然后打印最小距离的点.如果超过一个这样的点,打印全部
>现在我们有每个点的最小距离点.因此,现在打印最常出现的最小距离点.如果超过一个这样的点,打印全部
解决方法:
现在,当您详细指定算法时,我可以为它建议实现:
$a_all_ids = array_keys($a_points);
$a_neibor_ids = array();
foreach ($a_points as $i => $pt1) {
list($x1, $y1) = $pt1;
$a_dists = array();
foreach ($a_points as $j => $pt2) {
if ($j == $i) continue;
list($x2, $y2) = $pt2;
$a_dists[$j] = pow($x2- $x1, 2) + pow($y2- $y1, 2);
}
$min_dist = min($a_dists);
$a_neibor_ids = array_merge(
$a_neibor_ids,
array_keys(array_filter($a_dists, function ($v) use ($min_dist) {
return $v == $min_dist;
}))
);
}
$a_counts = array_count_values($a_neibor_ids);
$max_count = max($a_counts);
$a_result_points = array_intersect_key(
$a_points,
array_filter($a_counts, function ($v) use ($max_count) {
return $v == $max_count;
})
);
符号:
> $a_dists – 从当前点到其余点的距离.
> $a_neibor_ids – 我们找到每个点的最近点.
$a_neibor_ids是所有这些点(包括重复点)的并集.
> $a_counts – 来自$a_neibor_ids的每个值的出现次数.
内容总结
以上是互联网集市为您收集整理的php – 数组和循环管理全部内容,希望文章能够帮你解决php – 数组和循环管理所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。