Moh*_*umb 2 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"
);
Run Code Online (Sandbox Code Playgroud)
现在我想从它做3对,但两个对值必须最接近,例如答案将:
name three pair with name four
name one pair with name five
name two pair with name six
Run Code Online (Sandbox Code Playgroud)
我在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);
Run Code Online (Sandbox Code Playgroud)
返回:
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"
}
}
Run Code Online (Sandbox Code Playgroud)
做好了!
首先看第一个和最后一个项目,如果它们比第一个和第二个更接近,如果它们然后使用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);
Run Code Online (Sandbox Code Playgroud)
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"
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
54 次 |
最近记录: |