PHP排序多维数组并添加新项

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

我正在使用PHP和多维数组。我将点和其他信息存储为字符串变量。在数组中使用字符串变量非常重要

我想对数组进行排序并添加3个新项。我应该能够对我的子数组进行排序。我还应该能够排序我的分数(pts_)和比赛(c_字符串)字符串变量

我需要某种foreach循环来自动完成这项工作

也许下面的例子比我说的更有帮助

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
不存在时的情况。但实际上,代码用您发布的数据完全回答了问题。可能存在重复的