php - 如何获取多维数组中的唯一值并为每个唯一值添加值?

标签 php arrays multidimensional-array

我有一个数组。

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/

相关文章:

php - 来自 MySQL 的随机文本,只需单击按钮,无需使用 PHP 刷新

php - 重定向到单个搜索结果?

C 打印二维数组

php - 如何显示具有相同ID的多维数组(PHP,Laravel)

ruby - 在 Ruby 中创建二维数组和访问子数组

php - 检查文件名是否包含php中的变音符号

php - 创建一个用于插件展示的 WordPress 演示网站

javascript - 如何访问嵌套数组内对象的属性?

arrays - 将旧的 C for 循环更改为新的 Swift 循环

javascript - 不知道如何让这个名称生成器工作