【发布时间】:2021-04-29 14:34:10
【问题描述】:
我有一个数组$curvepoint,其结构如下:
Array
(
[0] => Array
(
[ID] => 57587
[Pos0] => 1
)
[1] => Array
(
[ID] => 57588
[Pos0] => 2
)
[2] => Array
(
[ID] => 57589
[Pos0] => 22
)
[3] => Array
(
[ID] => 57590
[Pos0] => 39
)
)
现在我想获取与值 [Pos0] 和给定数字相关的最接近的 smaller 数组键。
示例:
如果我有变量$number = 20,则循环应该返回1,因为20 中最接近的较小[Pos0] 值将是[Pos0] => 2,它存储在array key 1 中。
我非常不确定如何获得结果。我尝试在 foreach 循环中使用 array_slice 和 array_intersect 的组合。
原始尝试:
$number = 20
foreach ($curvepoint as $test) {
$two_nearest = array_slice(array_intersect(array_keys($test['Pos0']),range(0,$number)), -2);
$less_near = $test['Pos0'][$two_nearest[0]];
echo $less_near;
}
修改后的代码:
$value = 10;
function findClosestLowerPosition(array $curvepoint , int $value): ?int
{
$lowerPositions = array_filter(
array_column($curvepoint , 'Pos0'),
function ($a) use ($value) {
return $a < $value;
}
);
if (empty($lowerPositions)) {
return null;
}
}
print_r($lowerPositions);
【问题讨论】:
-
您已发布规范,但您的帖子中没有问题或问题描述。您是否尝试过自己解决这个问题?虽然我们很乐意在您遇到困难时为您提供帮助,但您应该自己做出努力。如果您尝试过某事,请编辑问题以展示您的努力,并解释它在哪里以及如何未能达到您想要的效果。
-
当然我已经尝试了很多,但我什至没有接近结果。无论如何,我已经发布了我的尝试/想法。
-
你已经完全陷入了一次做所有这些事情,嵌套数组函数没有一个清晰的想法。如果将其分解为较小的问题,则更容易找到解决方案。第 1 步:从数组中提取
Pos0的所有值。第 2 步:找到最接近的较小值(排序会有所帮助)。第三步:在原始数组中的Pos0下找到具有该值的元素。尝试为每个步骤编写代码,不要担心将其优化为更短的解决方案。 -
Pos0 = 22 不等于该数字,因此您需要一个范围,例如该数字应该低多少或高多少,例如,如果 pos0 > 25 拒绝它...如果=19 接受它
-
@KevinGales 指定要选择最接近的 lower 值。这是明确的。
标签: php