2017-01-22 206 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