PHP排序多维数组并添加新项
我正在使用PHP和多维数组。我将点和其他信息存储为字符串变量。在数组中使用字符串变量非常重要 我想对数组进行排序并添加3个新项。我应该能够对我的子数组进行排序。我还应该能够排序我的分数(pts_)和比赛(c_字符串)字符串变量 我需要某种foreach循环来自动完成这项工作 也许下面的例子比我说的更有帮助PHP排序多维数组并添加新项,php,arrays,sorting,multidimensional-array,Php,Arrays,Sorting,Multidimensional Array,我正在使用PHP和多维数组。我将点和其他信息存储为字符串变量。在数组中使用字符串变量非常重要 我想对数组进行排序并添加3个新项。我应该能够对我的子数组进行排序。我还应该能够排序我的分数(pts_)和比赛(c_字符串)字符串变量 我需要某种foreach循环来自动完成这项工作 也许下面的例子比我说的更有帮助 Array ( [25] => Array ( [1] => Array ( [pts_string] => 00450 [c_strin
Array (
[25] => Array (
[1] => Array (
[pts_string] => 00450
[c_string] => 00011
)
[2] => Array (
[pts_string] => 00600
[c_string] => 00025
)
[3] => Array (
[pts_string] => 00375
[c_string] => 00033
)
)
)
结果应该如下所示:
Array (
[25] => Array (
[pts_total] = 1425 /* 600 + 450 + 375 */
[all_pts_strings] = 00600 00450 00375 /* biggest points, 2nd biggest, etc. */
[all_c_strings] = 00025 00011 00033 /* competition of biggest points, 2nd biggest, etc. */
[no_of_competitions] = 3 /* [1], [2], and [3] = 3 in total */
/* biggest points first... */
[2] => Array (
[pts_string] => 00600
[c_string] => 00025
)
/* 2nd biggest points... */
[1] => Array (
[pts_string] => 00450
[c_string] => 00011
)
/* 3rd biggest points... */
[3] => Array (
[pts_string] => 00375
[c_string] => 00033
)
)
)
你可以这样做:
$arr = [
"25" => [
"1" => ["pts_string" => "00450", "c_string" => "00011"],
"2" => ["pts_string" => "00600", "c_string" => "00025"],
"3" => ["pts_string" => "00375", "c_string" => "00033"]
]
];
uasort($arr["25"], function ($a, $b) { return $b['pts_string'] - $a['pts_string']; });
$pts = array_column($arr["25"], "pts_string");
$c = array_column($arr["25"], "c_string");
$arr["25"] = [ "pts_total" => array_sum($pts),
"all_pts_strings" => implode(' ', $pts),
"all_c_strings" => implode(' ', $c),
"no_of_competitions" => count($arr["25"])
] + $arr["25"];
print_r($arr);
如果必须对数组中的每个项目执行此操作,请将所有代码放入foreach
循环中,并将$arr[“25”]
替换为$item
:
foreach ($arr as &$item) {
...
}
谢谢,看起来不错。如果我不知道子数组是[25],我如何修改代码?子数组号几乎可以是任何数字。因此,如果我有几个子数组,比如说[20]、[23]和[25],foreach循环会遍历所有子数组吗?uasort行给出:警告:非法字符串偏移。。。怎么办?@xms:更改函数以处理键
pts\u string
不存在时的情况。但实际上,代码用您发布的数据完全回答了问题。可能存在重复的