Php 对数组或数组排序?
我想对下面的数组进行排序。我想加上总数,如果名称是倍数。我还想把号码重新排列一下。它可以是索引+1Php 对数组或数组排序?,php,arrays,sorting,Php,Arrays,Sorting,我想对下面的数组进行排序。我想加上总数,如果名称是倍数。我还想把号码重新排列一下。它可以是索引+1 array ( 0 => array ('name' => 'Dave', 'number' => '1', 'total' => 1), 1 => array ('name' => 'Tom', 'number' => '2', 'total' => 1), 2 => array ('name' => 'Dave', 'nu
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),
);
到
有什么想法吗?使用自定义
$group
数组和数组\u值的解决方案
函数:
$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
)
)
更新:如果
编号
键应反映每个项目的顺序位置,则使用以下方法与自定义$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;
}
}
...
这是分组,不是排序。它看起来像PHP,如果是,请将问题标记为PHP。2.这个太宽了,你试过什么?向我们展示您遇到问题的代码。记住,我们是来帮助你的,不是你为你工作!我希望最后一个
[number]
=>4是[number]=>3
@iamkdev,根据什么逻辑?它应该是数组的位置。上例中最后一个元素索引是2,其位置是3。所以,应该是3。它类似于序列号。根据这一逻辑,为什么带有'name'=>'Tom'
的项目在您的预期结果中有'number'=>'2'
,而其初始位置是1
?@iamkdev,请检查我的更新
...
$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;
}
}
...