我有一个数组。
array(6) {
[0]=>
array(2) {
["name"]=>
string(5) "Sarah"
["collect"]=>
int(4)
}
[1]=>
array(2) {
["name"]=>
string(5) "Sarah"
["collect"]=>
int(5)
}
[2]=>
array(2) {
["name"]=>
string(7) "Aprelle"
["collect"]=>
int(2)
}
[3]=>
array(2) {
["name"]=>
string(4) "Just"
["collect"]=>
int(3)
}
[4]=>
array(2) {
["name"]=>
string(5) "Sarah"
["collect"]=>
int(3)
}
[5]=>
array(2) {
["name"]=>
string(5) "Sarah"
["collect"]=>
int(2)
}
我想获取每个唯一的名称并添加每个唯一名称的收集值的每个实例。
输出:
array(4) {
[0]=>
array(2) {
["name"]=>
string(5) "Sarah"
["collect"]=>
int(9)
}
[1]=>
array(2) {
["name"]=>
string(7) "Aprelle"
["collect"]=>
int(2)
}
[3]=>
array(2) {
["name"]=>
string(6) "Just"
["collect"]=>
int(3)
}
[4]=>
array(2) {
["name"]=>
string(5) "Sarah"
["collect"]=>
int(5)
}
到目前为止,我只能正确获取名称。如何添加每个名称的收集值?
这是我的代码
$stat = array ( 0 => array ( 'name' => 'Sarah', 'collect' => 4, ), 1 => array ( 'name' => 'Sarah', 'collect' => 5, ), 2 => array ( 'name' => 'Aprelle', 'collect' => 2, ), 3 => array ( 'name' => 'Just', 'collect' => 3, ), 4 => array ( 'name' => 'Sarah', 'collect' => 3, ), 5 => array ( 'name' => 'Sarah', 'collect' => 2, ), );
$datasetCount = count($stat); // returns count of array items of any array
echo "<h1>There are $datasetCount names</h1>";
$pname = "";
$pcollect = 0;
$i = 0;
foreach ($stat as $each_name) {
$i++;
$storename = "";
echo "<h2>Name $i</h2>";
while (list($key, $value) = each ($each_name)) {
if($i == 1)
{
if($key == 'name')
{
$pname = $value;
echo "<br/> Name: ".$pname."<br/>";
}
if($key == 'collect')
{
$pcollect = $value;
echo "<br/> Collect: ".$pcollect."<br/>";
}
}
else
{
if($key == 'name')
{
if($pname != $value)
{
$pname = $value;
$storename = $value;
$check = 1;
echo "<br/>".$storename."<br/>";
}else
{
$check = 0;
echo "<br/>".$storename."<br/>";
}
}
}
}
}
输出应按以下顺序:
Name:Sarah
Collect: 9
Aprelle
Collect: 2
Just
Collect: 3
Sarah
Collect: 5
检查下一个名字是否与名字相同,如果是,则合并它们。并再次检查下一个是否相同。
最佳答案
我会这样做:
$newArr = array();
foreach($stat as $val) {
if(isset($newArr[$val['name']])) {
$newArr[$val['name']] += $val['collect'];
} else {
$newArr[$val['name']] = $val['collect'];
}
}
如果您确实需要该格式
array(4) {
[0]=>
array(2) {
["name"]=>
string(5) "Sarah"
["collect"]=>
int(9)
}
[1]=>
array(2) {
["name"]=>
string(7) "Aprelle"
["collect"]=>
int(2)
}
}
然后添加:
$newArr2 = array();
foreach($newArr as $key=>$val) {
$newArr2[] = array('name' => $key, 'collect' => $val);
}
编辑:
仅当当前“名称”与之前的“名称”相同时才会添加“收集”的版本。
$newArr = array();
for($i = 0; $i<count($stat); $i++) {
// check if $newArr has any values, it will be false only the first loop
if(isset($newArr[key($newArr)]['name'])) {
// check if the current value of the loop is the same as the last value in the new array
if($stat[$i]['name'] == $newArr[key($newArr)]['name']) {
// if it is, this means that we just have to add the current "collect" value to the last element of $newArr
$newArr[key($newArr)]['collect'] += $stat[$i]['collect'];
} else {
// if not, we have to create a new value
$newArr[] = array('name' => $stat[$i]['name'], 'collect' => $stat[$i]['collect']);
// we have to go to the newly added value of the new array
next($newArr);
}
} else {
$newArr[] = array('name' => $stat[$i]['name'], 'collect' => $stat[$i]['collect']);
}
}
关于php - 如何获取多维数组中的唯一值并为每个唯一值添加值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30422874/