javascript - 使用 PHP/Javascript 将差异值最小的用户配对

标签 javascript php logic

我有一个带有名称和一些值的数组,如下所示:

$users = array(
    "name one"=>"2",
    "name two"=>"5.5",
    "name three"=>"8",
    "name four"=>"7",
    "name five"=>"2.5", 
    "name six"=>"3"
 );

现在我想用它制作 3 对,但两对值必须最接近,就像示例答案一样:

name three pair with name four
name one pair with name five
name two pair with name six

我在 php 或 javascript 中找不到任何用于像这样配对的函数或任何相关的有用函数。

请告诉我是否有任何可用于相同或相似事物的功能或任何自定义代码来实现它

最佳答案

我能看到的唯一逻辑是它们是最接近的值。
如果是这种情况,那么您可以 asort() 数组来保留键并按值排序。
然后在 2 上使用 array_chunk 并使用第三个参数 true 来保留键。

$users = array("name one"=>"2","name two"=>"5.5","name three"=>"8","name four"=>"7","name five"=>"2.5","name six"=>"3");

asort($users);
$users = array_chunk($users,2,true);

var_dump($users);

这将返回:

array(3) {
  [0]=>
  array(2) {
    ["name one"]=>
    string(1) "2"
    ["name five"]=>
    string(3) "2.5"
  }
  [1]=>
  array(2) {
    ["name six"]=>
    string(1) "3"
    ["name two"]=>
    string(3) "5.5"
  }
  [2]=>
  array(2) {
    ["name four"]=>
    string(1) "7"
    ["name three"]=>
    string(1) "8"
  }
}

https://3v4l.org/7SR7C


成功了!

首先查看第一个和最后一个项目是否比第一个和第二个更接近,如果它们那么使用 array_splice 将它们添加到新列表中(这会将它们从原始数组中删除)。
然后将其与 array_chunk 合并。

asort($users);
$keys = array_keys($users);

if(end($users) + $users[$keys[0]] < $users[$keys[1]]-$users[$keys[0]]){
    $new[0][$keys[0]] = array_splice($users,0,1);
    $new[0][end($keys)] = array_splice($users,-1);

}

$new = array_merge($new, array_chunk($users,2,true));


var_dump($new);

https://3v4l.org/739TZ

array(3) {
  [0]=>
  array(2) {
    ["name one"]=>
    array(1) {
      ["name one"]=>
      string(3) "-11"   // <--- see here
    }
    ["name six"]=>
    array(1) {
      ["name six"]=>    // <--- see here
      string(2) "12"
    }
  }
  [1]=>
  array(2) {
    ["name two"]=>
    string(3) "5.5"
    ["name four"]=>
    string(1) "7"
  }
  [2]=>
  array(2) {
    ["name three"]=>
    string(1) "8"
    ["name five"]=>
    string(1) "9"
  }
}

关于javascript - 使用 PHP/Javascript 将差异值最小的用户配对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54458264/

相关文章:

javascript - Socket.IO 中间件,io.use

javascript - 将 CSS 样式标记添加到谷歌地图

c# - 如何检查数字字符串是否在运行序列中

c# - 反转字符串

performance - 在Prolog中更快地执行口头算术

javascript - 如何使用 Paper.js 计算闭合多边形路径的内 Angular ?

javascript - 通过 z-index 跟踪元素可见性

php - PHP 的 XML 字符编码问题

PHP 对 while 循环中的变量求和

php - 你如何解释 new\DateTime ('0000-00-00 00:00:00' ) 的结果?