2017-03-26 36 views
-1

我正在使用PHP和多维数组。我已经将点和其他信息存储为字符串变量。在我的数组中使用字符串变量非常重要。PHP排序多维数组并添加新项目

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

我需要某种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 
    ) 
) 
) 
+0

可能的重复[如何在PHP中对数组和数据进行排序?](http://stackoverflow.com/questions/17364127/how-can-i-sort-arrays-and-data-in-php) – zett42

回答

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循环中并用$item替换$arr["25"]

foreach ($arr as &$item) { 
    ... 
} 
+0

谢谢,看起来不错。如果我不知道这个子数组是[25],我怎么能修改代码?子数组几乎可以是任何东西。 – xms

+0

因此,如果我有几个子数组,那么让我们说[20],[23]和[25],foreach循环是否会遍历所有这些子数组? – xms

+0

uasort row给我:警告:非法字符串偏移量...怎么办? – xms