【问题标题】:Multidimensional Array Find and Update The Value using PHP使用 PHP 查找和更新多维数组的值
【发布时间】:2013-03-15 22:38:59
【问题描述】:

我无法为该主题找到合适的标题(帮助我)。我无法描述这个问题,所以这里是我的问题的例子。

我的数组:

Array ( [0] => Array ( [answer] => a [score] => 3 )
[1] => Array ([answer] => b [score] => 4 ) 
[2] => Array ( [answer] => h [score] => 3) 
[3] => Array ( [answer] => a [score] => 4 ))
...

我想得到这样的输出:

Array ( [0] => Array ( [answer] => a [score] => 7 )
[1] => Array ([answer] => b [score] => 4 ) 
[2] => Array ( [answer] => h [score] => 3))
...

您可以看到索引键 0 中的分数子键发生了变化。这是因为索引键 0 和 3 的答案子键中有两个值“a”。由于两者的总和(3 +4)。真的我对此一无所知,对不起我的英语并感谢您的帮助。 随意发表评论。 :)

【问题讨论】:

  • 数组是否来源于数据库?
  • 不,我自己定义的

标签: php multidimensional-array


【解决方案1】:
$merged = array();

foreach ($array as $answer) {
    if (isset($merged[$answer['answer']])) {
        $merged[$answer['answer']]['score'] += $answer['score'];
    } else {
        $merged[$answer['answer']] = $answer;
    }
}

var_dump($merged);

【讨论】:

    【解决方案2】:

    检查这个答案,不使用循环:

    $arr  = array ( array ( 'answer' => 'a', 'score' => 3 ),
                    array ( 'answer' => 'b', 'score' => 4 ), 
                    array ( 'answer' => 'h', 'score' => 3), 
                    array ( 'answer' => 'a', 'score' => 4 ));
    
    $t = array_reduce($arr, function($result, $item) {
            if(array_key_exists($item['answer'],$result)){
               $result[$item['answer']]    = array('answer' => $item['answer'], 'score' => $item['score']+$result[$item['answer']]['score']);
            }
            else{
               $result[$item['answer']]    = array('answer' => $item['answer'], 'score' => $item['score']);
            }
        return $result;
    },array()); 
    
    echo "<pre>";
    print_r($t);
    

    输出:

    Array
    (
        [a] => Array
            (
                [answer] => a
                [score] => 7
            )
    
        [b] => Array
            (
                [answer] => b
                [score] => 4
            )
    
        [h] => Array
            (
                [answer] => h
                [score] => 3
            )
    
    )
    

    【讨论】:

      【解决方案3】:

      我虽然使用了一个临时数组:

      /* Current array */
      $array = array(
          array("answer" => "a", "score" => 3),
          array("answer" => "b", "score" => 4),
          array("answer" => "h", "score" => 3),
          array("answer" => "a", "score" => 4)
      );
      
      /* Using a temporary array */
      $tmp_array = array();
      foreach($array as $subarray){
          if(array_key_exists($subarray["answer"], $tmp_array)){
              $tmp_array[$subarray["answer"]] += $subarray["score"];
          }else{
              $tmp_array[$subarray["answer"]] = $subarray["score"];
          }
      }
      
      /* Creating a new formatted array */
      $new_array = array();
      foreach($tmp_array as $key => $value){
          $new_array[] = array("answer" => $key, "score" => $value);
      }
      
      print_r($new_array);
      

      【讨论】:

        猜你喜欢
        • 2020-02-15
        • 2014-12-13
        • 1970-01-01
        • 2013-11-11
        • 1970-01-01
        • 1970-01-01
        • 2013-10-14
        • 1970-01-01
        • 2012-09-07
        相关资源
        最近更新 更多