【问题标题】:computation on array-search in phpphp中数组搜索的计算
【发布时间】:2021-06-22 17:31:49
【问题描述】:

我有一个像这样的多维数组:

   array ( 'JD'=>2457002.50, 67.618536), 
   array ( 'JD'=>2457003.50, 67.619705), 
   array ( 'JD'=>2457004.50, 67.620938)....

我有一个价值说:

$MyJD = 2457003.9553;

我想在数组中找到值,如果没有,则匹配最接近的数字,并返回下一个索引(我假设是 [1])

我正在考虑进行 array_search,但它不会找到确切的数字,我想要最接近 $MyValue 的数字?

【问题讨论】:

  • 您可以计算数组中每个数字的距离和您的值,然后可能返回最小(第一次出现)距离的索引。

标签: php arrays search


【解决方案1】:

这不会返回索引,但会返回正确的数组:

array_multisort(array_map(function($v) use($MyJD) {
                              return abs($v['JD'] - $MyJD);
                          }, $array), $array);
$result = reset($array);
  • 计算每个JD 值和$MyJD 之间的差异
  • 按差值排序(对原始排序)并得到最低(第一个)一个

或者,您可以使用差异作为键进行组合,然后对键进行排序:

$array = array_combine(array_map(function($v) use($MyJD) {
                                     return abs($v['JD'] - $MyJD);
                                 }, $array), $array);
ksort($array);
$result = reset($array);

也许有人会发布一个好的array_reduce 答案。

【讨论】:

    【解决方案2】:

    做 bucle 把新数组与关键区别 这样,您将拥有按差异排序的数组 在每次迭代中 $myarray[myvalue - yourvalueinbucle] if -1 this key then ×-1 and how value you enter iterator of bucle, then your value for this key = your line multiarrayvalue in for each iterator

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-03
      • 1970-01-01
      • 2015-04-22
      • 2020-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多