我有一个带有名称和一些值的数组,如下所示:
$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"
}
}
成功了!
首先查看第一个和最后一个项目是否比第一个和第二个更接近,如果它们那么使用 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);
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/