【问题标题】:How to join duplicate arrays by value in php?如何在php中按值加入重复数组?
【发布时间】:2014-08-20 16:32:41
【问题描述】:

例如我有数组:

$myArr1 = array(
"word1" => "hello",
"word2" => "hi",
"word3" => "welcome",
);

$myArr2 = array(
"word1" => "hello",
"word3" => "welcome",
"word2" => "hola"
);

如何使连接重复键“单词”,如果有重复连接它的值以获得输出:

"word1" => "hello",
"word2" => "hi hola",
"word3" => "welcome"

【问题讨论】:

  • 你能更清楚地告诉我们你到底想要什么吗?
  • 你不可能有两个键
  • 你提到的场景不可能发生,因为一维关联数组不能有两个“相同的键”。
  • 对,我不能有 2 个相同的键。然后我将其更改为 2 个数组。在这个例子中如何做到最好?

标签: php arrays join duplicates


【解决方案1】:

制作一个函数怎么样?

function pushWordToArray($arr,$word,$key)...

在函数中,您将检查 $key 是否已经存在,然后将现有单词和您输入的 $word 连接起来。

编辑:

回答已编辑的问题。

只需遍历两个数组并连接两个重复的键(如果有的话)。

【讨论】:

    【解决方案2】:

    试试这个得到结果

    $myArr1 = array(
    "word1" => "hello",
    "word2" => "hi",
    "word3" => "welcome",
    );
    
    $myArr2 = array(
    "word1" => "hello",
    "word3" => "welcome",
    "word2" => "hola"
    );
    
    $myArr3 = merge_duplicate_values($myArr1,$myArr2);
    
    function merge_duplicate_values($myArr1,$myArr2){
    
    $myArr3=array_merge_recursive($myArr1,$myArr2);
    
     foreach($myArr3 as $key => $val){
    
        if(is_array($val)){
             $myArr3[$key] = implode(' ',array_unique($val));
    
           }
     }
    
     return $myArr3; // its your desired result
    }
    

    【讨论】:

    • 此代码将打印 hi hi 并欢迎欢迎。!
    • 请再检查一遍亲爱的 $myArr3[$key] = implode(' ',array_unique($val));
    【解决方案3】:
     $result = array();
     foreach($myArr1 as $k=>$v) {
    
        if($myArr1[$k]  == $myArr2[$k])
        {
            $result[] = $v;
        }
        else
        {
            $result[] = $v.' '.$myArr2[$k];
        }
    
    }
    print_r($result);
    

    【讨论】:

      【解决方案4】:

      将值循环到另一个值,如果需要,附加。您可以执行以下操作:

      $myArr1 = array(
      "word1" => "hello",
      "word2" => "hi",
      "word3" => "welcome",
      );
      
      
      $myArr2 = array(
      "word1" => "hello",
      "word3" => "welcome",
      "word2" => "hola"
      );
      
      
      foreach($myArr2 as $key => &$value) {
          if($myArr1[$key] != $myArr2[$key]) {
              $myArr1[$key] .= ' '.$value;
          }
      }
      
      print_r($myArr1);
      

      应该输出:

      Array
      (
          [word1] => hello
          [word2] => hi hola
          [word3] => welcome
      )
      

      【讨论】:

      • @SumanBiswas 为什么你的感情会受到伤害(哭泣)。改变了我的答案。现在开心吗?
      【解决方案5】:
      $myArr3 = array_merge_recursive($myArr1, $myArr2);
      
      foreach($myArr3 as $key => $value){
      
          if(!is_array($myArr3[$key])){
                  continue;
          }
      
          if($value[0] === $value[1]){
                  $myArr3[$key] = $value[0];
          }else{
                  $myArr3[$key] = implode(' ', $value);
          }
      }
      
      // print_r($myArr3);
      

      【讨论】:

        猜你喜欢
        • 2013-08-12
        • 2017-08-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-07
        • 2014-01-03
        • 2020-06-10
        • 1970-01-01
        相关资源
        最近更新 更多