简体   繁体   English

如果某些值在 php 中相似,从多维创建新数组?

[英]Create new array from a multidimensional if some values are similar in php?

I have an array like below我有一个像下面这样的数组

  Array ( 
    [0] => Array ( [subj_title] => A, [value] => 0 ) 
    [1] => Array ( [subj_title] => B, [value] => 30 ) 
    [2] => Array ( [subj_title] => C, [value] => 6 ) 
    [3] => Array ( [subj_title] => C, [value] => 8 ) 
    [4] => Array ( [subj_title] => C, [value] => 5 ) 
    [5] => Array ( [subj_title] => C, [value] => 11 ) 
  )

I would like this array to be like below我希望这个数组如下所示

  Array ( 
    [0] => Array ( [subj_title] => A, [value] => 0 ) 
    [1] => Array ( [subj_title] => B, [value] => 30 ) 
    [2] => Array ( [subj_title] => C, [value] => 30 ) //Sum of value C
  )

Trying to find the simplest way to do this, I am kind of messing up with my code.试图找到最简单的方法来做到这一点,我有点搞砸了我的代码。 Please refer the work请参考作品

  $old_subj_title = $subj_title = '';
  $j_subjects = $j_subject = [];  
  foreach($subjects_display as  $r) {
    $subj_title = !empty($r->subj_title) ? $r->subj_title : '';

        if(!empty($subj_title) && $old_subj_title != $subj_title) {
            $j_subject['subj_title'] = $subj_title;
            $j_subject['value'] = $r->marks;
        }
        if($old_subj_title == $subj_title) {
            //something can be done
        } 
        $j_subjects[] = $j_subject;

    $old_subj_title = $subj_title;
  }
  print_r($j_subjects);
  Output:
  Array ( 
    [0] => Array ( [subj_title] => A, [value] => 0 ) 
    [1] => Array ( [subj_title] => B, [value] => 30 ) 
    [2] => Array ( [subj_title] => C, [value] => 6 ) //Single entry of same title
  )

You can try the below code你可以试试下面的代码

$data = array ( 
        array ('subj_title' => 'A', 'value' => 0 ) ,
        array ('subj_title' => 'B', 'value' => 30 ) ,
        array ('subj_title' => 'C', 'value' => 6 ) ,
        array ('subj_title' => 'C', 'value' => 8 ) ,
        array ('subj_title' => 'C', 'value' => 5 ), 
        array ('subj_title' => 'C', 'value' => 11 ) 
);
$result = array();
foreach($data as $key => $value){
    $index = $value['subj_title'];
    // Create a new sub array with key as subj_title
    if(!isset($result[$index])){
        $result[$index]['subj_title']   =  $value['subj_title'];
        $result[$index]['value']        =  $value['value'];
    }else{
        // If subarray already exists then values get added
        $result[$index]['value']        =  $result[$index]['value'] + $value['value'];  
    }

}
$result = array_values($result);

echo '<pre>'; 
print_r($result); 

Demo Link演示链接

If you are fetching the data using SQL query, You can use GROUP BY to achive the result directly from database as follow如果您使用 SQL 查询获取数据,您可以使用 GROUP BY 直接从数据库中获取结果,如下所示

SELECT subj_title, SUM(value) as value FROM yourTable  
       GROUP BY subj_title

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM