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

时间:2017-03-26 17:56:10

标签: php arrays sorting multidimensional-array

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

我想对数组进行排序并添加3个新项目。我应该能够对我的子阵列进行排序。我也应该能够对点(pts_sting)和竞争(c_string)的字符串变量进行排序。

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

以下示例可能比我的话更有帮助。

var re = "[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?";
var regExp = new RegExp(e);
if(regExp.exec(t))
  ....

结果应如下所示:

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
    )
  )
)

1 个答案:

答案 0 :(得分:0)

你可以这样做:

$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) {
    ...
}