php - 如何在 PHP 中移动具有已知数组键权重的数组元素?
问题描述
让大脑因为一个相当微不足道的问题而冻结。如果我从这样的数组开始:
$my_array = array(
1 => [
"id" => 1,
"weight" => 0
],
2 => [
"id" => 2,
"weight" => -1
],
3 => [
"id" => 3,
"weight" => 0
],
4 => [
"id" => 4,
"weight" => -1
],
);
我将做一个将数组的键移动到键+“权重”的函数。所以结果会是这样的:
$my_array = array(
1 => [
"id" => 2,
"weight" => -1
],
2 => [
"id" => 1,
"weight" => 0
],
3 => [
"id" => 4,
"weight" => -1
],
4 => [
"id" => 3,
"weight" => 0
],
);
最有效的方法是什么?
解决方案
如果它可以帮助某些人,这是功能
function reorder_array(&$my_array) {
foreach ($my_array as $key => $object) {
$move = $object['weight'];
$arr = $my_array;
if ($move == 0 || !isset($arr[$key])) {
continue;
}
$i = 0;
foreach($arr as &$val){
$val = array('sort' => (++$i * 10), 'val' => $val);
}
$arr[$key]['sort'] = $arr[$key]['sort'] + ($move * 10 + ($key == $key ? ($move < 0 ? -5 : 5) : 0));
uasort($arr, function($a, $b) {
return $a['sort'] > $b['sort'];
});
foreach($arr as &$val) {
$val = $val['val'];
}
$my_array = $arr;
}
}
推荐阅读
- qt - 你如何在 QT 中找回 Designer 窗口?
- flutter - 如何获取评分值 Flutter rating Bar 以在 onPressed 函数中使用
- reactjs - 如何显示以状态保存的图像?
- python - CountVectorizer - 忽略出现次数少于 x 且字符少于 y 的单词
- python - 从第二个数据帧中的多个匹配创建/更新具有随机匹配的新字段
- java - 如何使用 GWT 屏蔽浏览器 URL
- powershell - 如何围绕 IIS AppCmd 包装 Powershell
- azure-communication-services - Video Quality - Azure Communication Services
- r - 创建主范围时尝试创建空间点变量时出错
- c# - C# 要修复此错误,请将 JSON 更改为 JSON 数组