2017-01-22 254 views
-1

我想要下面的數組進行排序。如果名稱出現倍數,我想添加總數。另外我想要重新排列號碼。它可以是指數+ 1對數組或數組進行排序?

array (
    0 => array ('name' => 'Dave', 'number' => '1', 'total' => 1), 
    1 => array ('name' => 'Tom', 'number' => '2', 'total' => 1), 
    2 => array ('name' => 'Dave', 'number' => '3', 'total' => 2), 
    3 => array ('name' => 'Amy', 'number' => '4', 'total' => 1), 
); 

array (
    0 => array ('name' => 'Dave', 'number' => '1', 'total' => 3), 
    1 => array ('name' => 'Tom', 'number' => '2', 'total' => 1),  
    2 => array ('name' => 'Amy', 'number' => '3', 'total' => 1), 
); 

任何想法?

+0

它的分組,而不是排序 – RomanPerekhrest

+0

1.它看起來像PHP,如果是,請標註問題本身。這太寬泛了,你試過了什麼?向我們展示您的代碼,具體來說,您遇到了問題。記住,我們在這裏幫助你,而不是爲你工作! – alfasin

回答

1

使用定製$group陣列和array_values功能的解決方案:

$arr = array (
array ('name' => 'Dave', 'number' => '1', 'total' => 1), 
array ('name' => 'Tom', 'number' => '2', 'total' => 1), 
array ('name' => 'Dave', 'number' => '3', 'total' => 2), 
array ('name' => 'Amy', 'number' => '4', 'total' => 1), 
); 

$group = []; 
foreach ($arr as $item) { 
    if (isset($group[$item['name']])){ 
     $group[$item['name']]['total'] += $item['total']; 
    } else { 
     $group[$item['name']] = $item; 
    } 
} 
$result = array_values($group); 

print_r($result); 

輸出:

Array 
(
    [0] => Array 
     (
      [name] => Dave 
      [number] => 1 
      [total] => 3 
     ) 

    [1] => Array 
     (
      [name] => Tom 
      [number] => 2 
      [total] => 1 
     ) 

    [2] => Array 
     (
      [name] => Amy 
      [number] => 4 
      [total] => 1 
     ) 
) 

更新:如果number鍵應該反映的序列位置每個項目使用以下方法與自定義$count變量:

... 
$group = []; 
$count = 1; 
foreach ($arr as $item) { 
    if (isset($group[$item['name']])){ 
     $group[$item['name']]['total'] += $item['total']; 
    } else { 
     $item['number'] = $count++; 
     $group[$item['name']] = $item; 
    } 
} 
... 
+0

我希望最後一個'[number]'=> 4是'[number] => 3' – iamkdev

+0

@iamkdev,通過什麼邏輯? – RomanPerekhrest

+0

它應該是數組的位置。上面的例子中最後一個元素索引是2,那個位置是3.所以,它應該是3.它的序列號。 – iamkdev