【问题标题】:Compare two arrays and merging in PHP比较两个数组并在PHP中合并
【发布时间】:2012-07-13 18:47:53
【问题描述】:

我有两个数组:

$array1 = array(1=>1,10=>1,12=>0,13=>13);
$array2 = array(1=>"Hello",10=>"Test",12=>"check",13=>"error");

这里 $array1 有键和值。现在我想从 $array1(as 1) 中获取第一个值,我想检查这是否在这个数组中重复。

这里 1 重复了两次,所以我想取两个键 1,10 并从 $array2 中显示这些键的对应值。如果 $array1 中的值不重复,那么我只想显示 $array2 中此键的值。

我想得到如下输出:

Hello Test
check
error

这意味着在 $array1 中 1,10 个键具有相同的值,因此值 1 和来自 $array2 的值​​ 10 合并然后显示。

就像 12 有 0 一样,这不会重复,所以只需从 $array2 中取 12 的值。

喜欢 13。

我该怎么做?

【问题讨论】:

    标签: php arrays


    【解决方案1】:
    <?php
    
    $array1 = array(1=>1,10=>1,12=>0,13=>13);
    $array2 = array(1=>"Hello",10=>"Test",12=>"check",13=>"error");
    $groupedKeys = array();
    foreach($array1 as $key=>$arr){
       $groupedKeys[$arr][] = $key;
    }
    foreach($groupedKeys as $key => $groupedKeyArr){
        foreach($groupedKeyArr as $groupedKey){
            echo $array2[$groupedKey];
        }
        echo "<br /> ";
    }
    
    ?>
    

    http://codepad.org/9R9s5lTM

    【讨论】:

      【解决方案2】:

      有一个内置函数可以返回一个数组,其中包含一个值的重复次数http://php.net/manual/en/function.array-count-values.php

      【讨论】:

        【解决方案3】:

        这确实很粗糙,但一种简单的方法可能是:

        <?
        
        $array1 = array(1=>1,10=>1,12=>0,13=>13);
        $array2 = array(1=>"Hello",10=>"Test",12=>"check",13=>"error");
        
        $prev = $array1[1];
        
        foreach($array1 as $key => $val)
        {
            if($val != $prev && $key != 1)
            {
                echo '<br />';
            }
        
            echo $array2[$key].' ';
        
            $prev = $val;
        }
        
        ?>
        

        示例:http://codepad.org/OpLdtStp

        这假设你的第一个键总是1

        【讨论】:

        • 你是对的,但考虑到问题和他想要做什么,我假设订单是一样的。他没有具体说明它们会改变。
        • 你能举一个可能顺序不同的例子吗?
        • $array1 = array(1=>1,10=>0,12=>1,13=>0); $array2 = array(1=>"Hello",10=>"Test",12=>"check",13=>"error");
        • $array1 = array(1=>0,10=>1,12=>0,13=>0); $array2 = array(1=>"Hello",10=>"Test",12=>"check",13=>"error");
        • 这是不同的订单,可能是任何订单
        【解决方案4】:

        我正在为您提供一个函数,该函数返回一个数组,其中一个值在数组中重复的次数(作为值)和值作为键。进一步的任务并不困难。

        function check_number_of_times_elements_occur_in_array($a)//returns values of array as keys, associating values being their total occurences in the array
        {
        $r=array();
        foreach($a as $v)
            ++$r[$v];
        return $r;
        }
        

        【讨论】:

          【解决方案5】:

          我认为这对你有用..

          function test($array1,$array2) {
          $repeated_values = array_count_values($array1);
          foreach($repeated_values as $key => $value){
              if($value > 1) {
                  foreach($array1 as $key1 => $value1){
                      if($key == $value1){
                          $repeated_values_keys[] = $key1;
                      }
                  }
              }
          }
          $str_top = "";
          foreach($repeated_values_keys as $k){
              $str_top .= $array2[$k]." ";
          }
          echo $str_top.'<br/>';
          foreach($array2 as $key2 => $value){
              if(!in_array($key2,$repeated_values_keys)){
                  echo $value.'<br/>';
              }
          }
          

          }

          【讨论】:

            猜你喜欢
            • 2013-11-26
            • 2021-05-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-04-21
            • 2022-12-06
            • 1970-01-01
            相关资源
            最近更新 更多